스코프 함수
코틀린의 표준 라이브러리에서 '스코프 함수'를 제공해준다.
특정 객체의 컨텍스트 안에서 특정 동작(속성 초기화, 활용 등)을 실행하기 위한 목적만을 가진 함수
이 스코프 함수를 람다 함수로 사용할 때 스코프를 형성하게 되는데, 이 스코프 내에서 객체의 이름을 참조할 필요 없이 객체에 접근하고 핸들링하기 편하게끔 해준다.
apply, run, with, also, let이 있다.
data class Member(val name; String, var age : Int)
apply
inline fun <T> T.apply(block : T.() -> Unit): T {
block()
return this
}
객체를 새로 생성하고 특정 변수에 할당하기 전에 초기화 작업을 하는 스코프를 만든다.
apply 함수 내에 모든 명령들이 수행되고 나면 명령들이 적용되어 새로 생성된 객체를 반환한다.
반환 결과가 바로 객체 자신이다.
확장 함수이기 때문에 객체 컨텍스트를 receiver(this)로 이용이 가능하다.
-> 이벤트 아메리카노의 500원
run
inline fun <T,R> T.run(block : T.() -> R) : R {
return block()
}
apply와 명확하게 다른 점이 반환하는 값이 객체가 아닌 스코프 내에 실행된 값이다.
그러므로 특정 객체의 프로퍼티를 출력하거나 계산값으로 활용하는 등의 핸들링을 할 때 사용한다.
확장함수 이기 때문에 apply와 마찬가지로 receiver(this)로 이용이 가능하다.
safe call(.?)을 붙여 non-null일 떄만 실행이 가능하도록 할 수 있다.
-> 아메리카노의 1500원
가격은 4500
with
inline fun <T, R> with(receiver : T, block: T.() -> R) : R{
return receiver.block()
}
확장 함수가 아니므로 컨텍스트 객체를 argument로 전달하여 람다의 내부에서는 확장함수로 적용되어 receiver(this)로 사용이 가능하다.
특징 및 동작은 run과 동일하다.
also
inline fun <T> T.also(block: (T) -> Unit) : T {
block(this)
return this
}
also는 apply와 동일하게 생성된 인스턴스를 반환한다.
it을 사용해 프로퍼티에 접근이 가능하다.
객체의 프로퍼티를 전혀 사용하지 않거나 변경하지 않고 사용하는 경우에 유용하다.
예를 들면, 객체의 데이터 유효성 확인, 디버그, 로깅 등의 부가적인 목적으로 사용한다.
let
inline fun<T,R> T.let(block : (T) -> R) : R{
return block(this)
}
let은 run과 동일하게 최종 실행 결과를 반환한다.
also와 마찬가지로 it을 사용해 프로퍼티에 접근이 가능하다.
지정된 값이 null이 아닌 경우에 코드를 실행해야 하는 경우 및 nullable 객체를 다른 nullable 객체로 변환하는 경우 사용한다.
'Language > kotlin' 카테고리의 다른 글
[Kotlin] 오버로딩 & 오버라이딩 (0) | 2024.08.08 |
---|---|
[Kotlin] Coroutine (0) | 2024.07.23 |
[Kotlin] 추상 클래스 & 인터페이스 (0) | 2024.06.10 |
[kotlin] Data class 란? (0) | 2024.05.29 |
[kotlin] 정렬 정리 (0) | 2023.12.19 |