Today
Yesterday
Total
  • 💡 [Kotlin/코틀린] let 함수가 뭐죠?
    | 프로그래밍 분야/Kotlin 2021. 6. 28. 15:19

    let 함수의 정의

    kotlin
    닫기
    fun <T, R> T.let(block: (T) -> R): R

     

    let 함수는 타입 T의 확장함수입니다.

    ※ 타입 T란?

    따라서 모든 타입의 객체에 Chain Method(점(.)으로 이어나가는) 방식으로 사용할 수 있습니다.

    반환 타입도 참조형 타입 R로 선언되어, 어떤 타입도 반환 타입도 가질 수 있으며, 반환값을 갖지 않을 수도 있습니다. (참조형 타입에 대한 설명은 위 링크에서 확인하실 수 있습니다.)

     

     

    let 함수의 특징 및 용례

    let 함수람다식으로 중괄호를 채워 이용합니다.

    let 함수스스로의 객체를 인자로 받아 사용합니다.

    또한, 중괄호 내부에서 해당 객체를 it 키워드로 호출할 수 있습니다.

    kotlin
    닫기
    fun main() { ​​​​val a:String = "m" // 먼저, let 함수를 사용할 객체를 선언합니다. ​​​​ ​​​​a.plus("e").plus("o").plus("ru").let { it.plus("1"); print(it) } ​​​​// 기존 코드 ​​​​// a.plus("e").plus("o").plus("ru").plus("1"); print(a.plus("e").plus("o").plus("ru").a) }

    [출력] meoru 

     

    이와 같이, 코드의 길이가 길어지거나 중복 호출될 때 let 메서드를 사용하여 코드를 간결하게 할 수 있습니다.

     

     

    it 키워드가 아닌, 인자의 이름을 직접 명명하여 사용할수도 있습니다.

    kotlin
    닫기
    fun main() { ​​​​val a:String = "meoru" ​​​​ ​​​​a.let { str -> str.plus("1"); print(str) } }

    [출력] meoru 

     

     

    세이프콜(Safe Call, "?.")을 이용하여 객체가 null인 경우를 따로 처리해줄 수 있습니다.

    kotlin
    닫기
    fun main() { ​​​​var str:String? = null ​​​​str?.let {str = "-tech"}?: run{ str = "meoru" } ​​​​print(str) ​​​​str?.let {str = "-tech"}?: run{ str = "meoru" } ​​​​print(str) }

    [출력] meoru-tech 

     

     

    람다식 내부의 마지막 줄에 식이 아닌 변수나 객체 단일로 존재할 시, 그 값이 곧 반환값이 됩니다.

    또한, it 키워드는 let 함수 내부에서 앞의 객체를 val 타입으로 복사하여 사용하는 것으로, 동일한 데이터를 갖지만 다른 주소를 참조합니다. 따라서 아래와 같이 it의 데이터를 수정하려고 할 시 오류가 발생할 수 있습니다.

    kotlin
    닫기
    fun main() { ​​​​var str:String = "-tech" ​​​​println (str.let { ​​​​​​​​str = "meoru" ​​​​​​​​// it = "meoru" <Error!> ​​​​​​​​str + it ​​​​​​​​}) }

    [출력] meoru-tech 

     

    Reference

    https://kotlinlang.org/docs/scope-functions.html#context-object-this-or-it

     

sangilyoon.dev@gmail.com