Kotlin
Scope Function apply
lwndnjs93
2020. 7. 26. 14:21
코틀린에서는 모든 객체에 범위(Scope)함수를 기본적으로 제공한다
이는 객체를 사용할때 해당 범위 내에서는 별도의 이름 없이 객체에 접근이 가능하다
범위 지정 함수로는 apply, with, let, also, run이 있다
이들은 공통적으로
- 수신 객체
- 수신 객체 지정 람다
이 두가지 구성 요소를 가진다
- apply
apply는 호출하는 객체를 블록에 넘겨주고 다시 객체를 반환한다
객체를 반환하는 점에서는 aslo와 유사해보이지만
inline fun <T> T.apply(block: T.() -> Unit): T
inline fun <T> T.also(block: (T) -> Unit): T
T.()에서 람다식이 확장함수로 처리되는것을 알수있다
apply에서는 확장함수로 처리되기때문에 it이 아닌 this로 접근을 한다
원본 객체에 데이터를 변경하고 그 객체를 다시 반환하기때문에
ryan을 출력했을때 Friends(name=Muzi, age=4) 가 나온다
두번째 apply를 호출한 뒤 ryan과 con을 출력할때는
둘 다 Friends(name=Con, age=6) 가 출력된다
- apply 사용 예
람다식 내부에서 객체의 함수를 사용하지 않고, 객체를 다시 반환하는 경우에 apply를 사용한다
객체의 프로퍼티만을 사용하는 경우로 객체 초기화가 있다