728x90
https://thkim-study.tistory.com/6 - let() 함수
https://thkim-study.tistory.com/8 - apply(), run() with() 함수
아래 표를 참고하면서 스터디해보자.
함수의 람다식 접근 방법
함수 이름 | 람다식 접근 방법 | 반환 방법 |
let | it | block 결과 |
also | it | it |
apply | this | this |
run | this | block 결과 |
with | this | Unit |
also() 함수 활용
also() 함수는 함수를 호출하는 객체 T를 이어지는 block에 전달하고 객체 T 자체를 반환한다.
let() 함수는 마지막으로 수행된 코드 블록의 결과를 반환하고
also() 함수는 블록 안의 코드 수행 결과와 상관없이 T인 객체 this를 반환한다.
var m = 1
m = m.also { it + 3 }
println(m) // 원본 값 1
연산 결과인 4가 아니라 it의 본래의 값 1이 할당된다.
간단한 활용의 예제를 살펴보자.
data class Person(var name: String, var skills: String)
var person = Person("Name", "Java")
val a = person.let {
it.skills = "Kotlin"
"success" // 마지막 결과를 반환
}
println(person) // Person(name=Name, skills=Kotlin)
println("a: $a") // a: success
val b = person.also {
it.skills = "Swift"
"success" // 마지막 결과는 사용되지 않음
}
println(person) // Person(name=Name, skills=Swift)
println("b: $b") // b: Person(name=Name, skills=Swift)
let() 함수는 person 객체에서 skills를 변경하고 변수 a에 success를 할당한다.
also() 함수는 람다식을 처리하지만 변수 b에 person 객체 자신이 할당된다.
따라서 b는 Person의 객체 person을 반환하고 새로운 객체 b가 할당되어 만들어진다.
특정 단위의 동작 분리
fun makeDir(path: String): File {
val result = File(path)
result.mkdirs()
return result
}
디렉터리를 만드는 함수라고 가정해보자.
위와 같은 코드를 let() 함수와 also() 함수로 간단하게 개선할 수 있다.
fun makeDir(path: String) = path.let{ File(it) }.also{ it.mkdirs() }
다음은 apply() 함수를 알아보자.
728x90
'Kotlin' 카테고리의 다른 글
[kotlin] 부분 문자열 추출(슬라이싱) (0) | 2020.12.19 |
---|---|
[kotlin] 배열 뒤집기 - reverse(), reversed(), reversedArray() (0) | 2020.12.19 |
[kotlin] 수 반올림하기 (0) | 2020.12.19 |
[Kotlin] 코틀린 표준 라이브러리 let(), also(), apply(), run(), with() - (3) (0) | 2020.07.22 |
[Kotlin] 코틀린 표준 라이브러리 let(), also(), apply(), run(), with() - (1) (0) | 2020.07.22 |
댓글