본문 바로가기
Kotlin

[Kotlin] 코틀린 표준 라이브러리 let(), also(), apply(), run(), with() - (2)

by Taehyung Kim, dev 2020. 7. 22.
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

댓글