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

    let 함수의 정의

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

     

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

    ※ 타입 T란?

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

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

     

     

    let 함수의 특징 및 용례

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

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

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

    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 키워드가 아닌, 인자의 이름을 직접 명명하여 사용할수도 있습니다.

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

    [출력] meoru 

     

     

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

    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의 데이터를 수정하려고 할 시 오류가 발생할 수 있습니다.

    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