1. 코틀린 스코프 함수 소개
- 스코프 함수(Scope functions)는 객체의 컨텍스트 내에서 코드 블록을 실행하기 위한 목적으로 존재하는 함수입니다.
- 이 함수들을 사용하면 객체의 이름을 반복하지 않고도 그 객체에 대해 여러 연산을 수행할 수 있습니다.
- 코틀린 표준 라이브러리는 다섯 가지 스코프 함수를 제공합니다:
with
,apply
,let
,also
,run
- 이 함수들은 모두 람다식을 인자로 받고, 객체를 컨텍스트로 하여 특정 스코프에서 코드 블록을 실행 합니다.
2. 스코프 함수의 공통점과 차이점
2.1 스코프 함수의 공통점
- 모든 스코프 함수는 코드 블록을 실행하기 위한 임시 스코프를 형성합니다.
- 이 스코프 내에서는 객체 이름을 사용하지 않고도 객체에 접근할 수 있습니다.
- 스코프 함수를 사용하면 코드의 가독성과 간결성이 향상됩니다.
2.2 스코프 함수의 차이점
스코프 함수들은 다음 세 가지 특성에 따라 구분됩니다:
- 수신 객체 지정 방식:
- 수신 객체를 람다의 수신자(
this
)로 제공:with
,apply
,run
- 수신 객체를 람다의 인자(
it
)로 제공:let
,also
- 수신 객체를 람다의 수신자(
- 반환 값:
- 컨텍스트 객체 반환:
apply
,also
- 람다 결과 반환:
with
,let
,run
- 컨텍스트 객체 반환:
- 확장 함수 여부:
- 확장 함수로 호출:
apply
,let
,also
,run
- 일반 함수로 호출:
with
- 확장 함수로 호출:
다음 표는 이러한 차이점을 요약합니다:
함수 | 수신 객체 참조 | 반환 값 | 확장 함수 여부 |
---|---|---|---|
with | this | 람다 결과 | 일반 함수 |
apply | this | 컨텍스트 객체 | 확장 함수 |
run | this | 람다 결과 | 확장 함수 |
let | it | 람다 결과 | 확장 함수 |
also | it | 컨텍스트 객체 | 확장 함수 |
3. with 함수
with
는 객체의 이름을 반복하지 않고도 그 객체의 멤버에 접근할 수 있게 해주는 함수입니다.
3.1 with 함수의 구조
inline fun <T, R> with(receiver: T, block: T.() -> R): R {
return receiver.block()
}