- 새 코틀린 파일 생성
Step10_CollectionFunction
package com.example.kotlin_test
val nums= listOf<Int>(1,2,3,4,5,6,7,8,9,10)
fun main(){
//목록에 저장된 모든 아이템을 순회하면서 어떤 작업하기
nums.forEach (fun(item){
println(item)
})
println("------------------")
nums.forEach ({
println(it)
})
println("------------------")
nums.forEach { println(it) }
//목록에 저장된 모든 아이템을 순회하면서 조건에 맞는 아이템만 남긴 새로운 목록 얻어내기
val result=nums.filter{
it > 5 //이 조건이 true인 아이템만 남긴 새로운 목록이 만들어진다.
}
println(result)
//목록에 저장된 모든 아이템을 순회하면서 어떤 조작을 가한 새로운 목록 얻어내기
val result2=nums.map {
it * 2
}
println(result2)
}

- 배열의 데이터를 쭉 하나하나 참조해서 어떤 작업을 할 때 제공되는 함수들.
- forEach() : 배열 단순참조하기

- 함수를 호출하면서 인자로 함수를 전달하기

- 위 3개는 모두 같은 것이다. 아래가 요약해서 쓸 수 있는 최종적인 형태이다!
it을 활용해서 아이템을 모두 참조하기. 순서대로 출력된다.
val result=nums.filter{
it > 5 //이 조건이 true인 아이템만 남긴 새로운 목록이 만들어진다.
}
- filter() : 조건에 맞는 아이템만 남겨서 새로운 배열 얻어내기
- javascript의 filter와 비슷하다.

- 5보다 큰 수만 남긴 새로운 배열이 나타난다.
val result2=nums.map {
it * 2
}
- map() :모든 아이템에 () 안의 함수를 적용한 새로운 목록 얻어내기
- 각 아이템에 2를 곱한 값이 들어있는 새로운 배열이 나타난다.
- foreach, filter, map 잘 알아두기!
Step10_CollectionFunction2
package com.example.kotlin_test
val nums2= listOf<Int>(1,2,3,4,5,6,7,8,9,10)
//친구의 나이와 이름을 저장하는 데이터 클래스
data class Friend(val age:Int, val name:String)
fun main(){
//연속으로 함수를 호출할 수 있다.
val result=nums2.filter { it>5 }.map { it*2 }
println(result)
//nums2 목록에서 짝수만 골라서 제곱을 한 결과 목록을 얻어내 보세요.
val result2=nums2.filter { it%2 == 0 }.map { it*it }
println(result2)
val f1=Friend(30,"바나나")
val f2=Friend(42,"딸기")
val f3=Friend(38,"복숭아")
val f4=Friend(25,"사과")
val f5=Friend(29, "오렌지")
val friends= listOf(f1,f2,f3,f4,f5)
//나이가 30 이상인 친구의 이름에 "님"을 붙인 새로운 목록
val result3=friends.filter { it.age>=30 }.map { it.name+"님" }
println(result3)
}
val result=nums2.filter { it>5 }.map { it*2 }
- 5보다 큰 수만 남기고 map 함수 적용하기
- 이렇게 점을 찍어서 연속으로 함수 호출이 가능하다!

- 생성자를 이렇게 만들면 자동으로 필드가 생겨나면서 전달된 숫자와 문자가 자동으로 필드에 저장된다.
val result3=friends.filter { it.age>=30 }.map { it.name+"님" }
- 나이가 30 이상인 친구의 이름 뒤에 "님" 을 붙인 새로운 목록 얻어내기

- it 이라는 것은 나이가 아니고 friend 객체이다. friend 객체에 들어있는 age를 참조해야 하므로 it.age 라고 작성!
Step11_SetterGetter
package com.example.kotlin_test
class StarBucks{
var location:String?=null
set(value) {
println("location 의 setter 메소드 호출됨")
field=value+" 지점"
}
get() {
if (field==null){
return "지점명 없음"
}else{
return field
}
}
}
fun main(){
val s1=StarBucks()
s1.location="강남" //값을 넣어줄때는 setter 호출
val s2=StarBucks()
s2.location="역삼"
val s3=StarBucks()
println(s1.location) //값을 참조할때는 getter 호출
println(s2.location)
println(s3.location)
}

- 가상의 스타벅스 함수 생성. 스타벅스의 위치는 문자열이고, null을 허용하겠다는 뜻.

- 생성할때는 null이었는데, 생성해서 s1, s2변수에 넣으면서 값을 넣어준것이다.
- 그런데 추가적으로 뭔가 조작해서 집어넣고 싶을 수 있다.
- 예를 들어 location 값 뒤에 "+지점" 이 붙었으면 좋겠다면?

- set 이라는 함수가 있다.
- 아래에서 생성하면서 담은 value 값이 여기의 set(value)에 전달된다.

- 저 field는 location을 말한다.

- 대입한 값이 value로 들어가고, 이 value 에 가공을 해서 field에 집어넣는 형태이다.
get() {
if (field==null){
return "지점명 없음"
}else{
return field
}
}
- get() : 값을 가지고 간다.
- 필드가 아닌 다른 값을 리턴할 수도 있다.
- 참조할때는 getter 메소드를 호출한다.

- 필드를 선언하고 필요에 따라 setter, getter 역할의 메소드를 만들어서 호출해줄 수 있다.
- set 안의 동작, get 안의 동작을 마음대로 정할 수 있다.

- 콘솔창에 아래와 같이 출력된다. 값을 넣어주지 않았을 경우 field가 아닌 다른 값이 출력됨!

- 어떤 값을 가져갈때 다른 동작을 해주고 싶다면(수행할 코드가 있다면)
setter getter 메소드 안에서 작업하면 된다.
- 이런 set, get을 지워도 에러가 나는 건 아니다. location에 값을 그냥 넣고싶으면 필요없다.
- 필드에 어떤 작업을 하고싶을 때 사용한다.

- 이 안에서는 field 라는 예약어를 사용한다.
- 위 코드에서 field = this.location 이라고 보면 된다.
'국비교육(22-23)' 카테고리의 다른 글
73일차(3)/Android App(24) : View 로 미니 슈팅게임 만들기(3) (0) | 2023.01.19 |
---|---|
73일차(2)/Android App(23) : View 로 미니 슈팅게임 만들기(2) (0) | 2023.01.19 |
72일차(5)/Android App(21) : View 로 미니 슈팅게임 만들기(1) (0) | 2023.01.19 |
72일차(4)/Android App(20) : Custom View (0) | 2023.01.19 |
72일차(3)/Android App(19) : View Binding (0) | 2023.01.19 |