[Android] Kotlin apply, run, with, let, also 정리

2023. 1. 1. 16:11정리

반응형

범위 지정 함수 (Scope function)란?

범위 지정 함수는 특정 객체에 대한 작업을 블록 안에 넣어 실행할 수 있도록 하는 함수이다.

블록은 특정 객체에 대해 할 작업의 범위가 되고, 따라서 범위 지정 함수라고 한다. 

 

1. apply 수신객체 내부 프로퍼티를 변경한 다음 수신객체 자체를 반환하기 위해 사용되는 함수이다

val a = A().apply {

    b = "B"

    c = 30

}

기존 

val a = A()

a.b = "B"

a.c = 30

 

2. run은 apply와 똑같이 동작하지만 수신 객체를 return하지 않고, run 블록의 마지막 라인을 return 하는 범위 지정 함수이다. 수신 객체에 대해 특정한 동작을 수행한 후 결과값을 리턴 받아야 할 경우 사용

data class A (

    var name: String = "",

    var age: Int = 0,

    var temp: Float = 36.5f

) {

    fun isTemp(): Boolean = temp > 37.5f

}

 

val a = A("AA", 29, 38.0)

val isA = a.run {

  temp = 38.0

  isTemp() // return 값 : true

}

 

3. with는 수신객체에 대한 작업 후 마지막 라인을 return 한다. run과 완전히 똑같이 동작한다. 다른점 하나는 run은 확장 함수로 사용되지만 with는 수신객체를 파라미터로 받아 사용한다는 점이다.

val a = A("AA", 29, 38.0)

val isA = with(a) {

  temp = 38.0

  isTemp() // return 값 : true

}

 

4. let은 수신객체를 이용해 작업을 한 후 마지막 줄을 return 할 때 사용한다. run 이나 with과는 수신객체를 접근할 때 it을 사용해야 한다.

null 체크 후 코드를 실행해야 하는 경우

nullable한 수신객체를 다른 타입의 변수로 변환하는 경우

 

 

5. also는 apply와 마찬가지로 수신객체 자신을 반환한다. 

val age = 5

fun getAge() = age.also {

  age++

}

getAge() // 5

getAge() // 6

 

 

반응형