let

OneTwoThree·2022년 7월 28일
0

부스트코스 코틀린

목록 보기
14/26

[부스트코스]let

확장함수이기 때문에 .함수명 형태로 정의되어 있다.
it은 대상 객체를 복사해오는 것이고 this는 원본을 대상으로 한다.

let

T,R은 형식매개변수로 어떠한 자료형도 될 수 있다.
T.let()으로 T가 let을 호출한다.
let은 매개변수로 람다식 block : (T)->R을 갖는다.
T를 block의 인자로 전달하고 전달받은 T로 람다식을 실행해서 결과인 R을 반환한다.
return block(this)에서 this가 T를 가리킨다.


let의 사용방법은 다음과 같다.
score는 Int? 즉 Nullable type이다.
let을 사용하지 않으면 if문을 이용해 null검사를 한다.

반면에 score?.let{~~}으로 let을 사용하면 세이프콜을 사용해서 null검사를 생략할 수 있다. let의 인자 람다식의 표현식에서는 it을 사용해서 score를 복사해서 처리하는 방식이다.

앞쪽 요소가 score로 간단하기 때문에 별 필요성이 느껴지지 않지만 복잡한 요소일 경우 it으로 간단하게 처리가 가능해서 유용하다.

let 체이닝

fun main() {
    var a = 1
    val b = 2

    a = a.let{it+2}.let{
        println("a = $a")
        it+b
    }
    println("a = $a")
}

a = 1
a = 5

a가 첫번재 let의 it으로 복사되어서 전달된다
2를 더하고 다시 복사되어서 다음 let의 it으로 전달된다.
i = 5가되고 a에 할당되므로 a는 5가된다.
두번재 let블록에서 a를 출력하는데 이 때 a는 1이다.
왜냐하면 a를 it으로 복사해서 값을 사용하기 때문에 a에 최종적으로 값을 할당하기 전 a는 1이다.

let 중첩사용

fun main() {
    var x = "Kotlin"
    x.let{o->o.let{
        i->println("o : $o i : $i")
    }}
}

o : Kotlin i : Kotlin

let을 중첩사용 할 때는 it을 사용하지 않고 명시적 이름으로 매개변수를 만들어 사용한다.
매개변수가 1개일 경우 매개변수 표현을 생략하고 it으로 사용하지만 명시적 매개변수를 사용할 때는 매개변수 표현과 -> 를 작성해 줘야 한다.

중첩된 let의 사용에서 값을 반환할 때는 바깥쪽 let의 반환값만 반환된다. 즉 위의 예시에서 x에는 Outer String이 반환된다.

안드로이드 커스텀 뷰에서의 let 활용


let을 이용해서 코드가 훨신 간략화되는 예시이다.

null검사


let은 null 검사에도 유용하게 쓰인다.
Nullable type은 null != obj와 같이 null 검사를 해준다.
하지만 세이프콜과 let을 같이 사용하면 null 검사를 훨씬 간편하게 할 수 있다.

else문이 포함된 문장 대체

let과 elvis 연산자를 동시에 사용해서 null 검사와 else문까지 간편하게 표현할 수 있다.
elvis 연산자는 ?: 기준으로 좌측이 null이면 우측 내용을 반환한다.

0개의 댓글