Kotlin apply, with, let, also, run ScopeFunction

권태용·2020년 7월 27일
0

Kotlin

목록 보기
6/6

최근 웹 어플리케이션을 개발중에 있습니다. 그중 Spring 프레임워크를 사용하였고 Kotlin을 통해 개발하게 되었습니다.

Kotlin에 대한 첫 느낌은 'Java, Javascript, Python의 끔찍한 혼종? 또는 아름다운 조화' 입니다. 잘 사용하면 코드가 정말 간결해지지만 자칫하면 개발시간을 쓸데 없는데 버리게 되는것 같습니다.

이러한 느낌을 받은 이유는 apply, with, let, also, run 와 같은 ScopeFuntion 때문입니다.. 이번글에서 ScopeFuncion을 사용하면서 헷갈렸던 점을 이야기하고 제가 생각 하는 잘 사용하는 방법?에 대해 적어보려 합니다.

실제 코드 확인하기(파라미터, 리턴 타입)

ScopeFunction은 비슷한 형태를 가지지만 실제 함수내용을 확인하면 각기 파라미터와 리턴 값이 다릅니다.

inline fun <T, R> with(receiver: T, block: T.() -> R): R {
    return receiver.block()
}
inline fun <T> T.also(block: (T) -> Unit): T {
    block(this)
    return this
}
inline fun <T> T.apply(block: T.() -> Unit): T {
    block()
    return this
}
inline fun <T, R> T.let(block: (T) -> R): R {
    return block(this)
}
inline fun <T, R> T.run(block: T.() -> R): R {
    return block()
}

위 코드를 보면 with는 파라미터로 receiver를 넘겨주고 나머지 also, apply, let, run은 받지 않고 객체에대해 함수를 정의하고 있습니다.

또한 리턴 값의 경우 also, apply는 수신 받은 객체를 리턴하지만 let과 run은 block함수 자체를 리턴합니다. 이점을 고려하여 자신이 생각하는 코드와 부합한 함수를 선택해야 합니다.

용도에 따른 함수 사용방법

함수마다의 용도 사용방법의 예시는 여러 글이 있습니다. 코틀린 공식문서와 정리가 잘 되어 있는 글을 올려 두겠습니다. (한글, 영어)

함수의 용도를 잘 사용하는것은 개발을 많이 하느냐에 따라 결정 되는것 같습니다. 무리해서 한번에 함수의 용도를 외우는 것 보다는 개발과 함수의 리턴 타입과 파라매터 전달 방식을 고려해서 실제 서비스에 녹여내느것이 좋을것 같습니다.

가장중요한것

링크에 정의된 표(파라미터, 리턴 값)에 따라 함수의 정의를 외우지 말고 코드를 보면서 익숙해 지는 것

profile
개발일기장

0개의 댓글