Kotlin 문법 배우기
코틀린의 스코프 함수 (Scope functions)
스코프 함수 종류
| 함수 | 블록 안에서의 참조 | 반환값 | 주 사용 목적 | 비유 |
|---|---|---|---|---|
let |
it |
람다의 결과 | 변환 | 값을 가공한다. |
run |
this |
람다의 결과 | 계산 수행 | 객체 안에서 계산한다. |
with |
this |
람다의 결과 | 여러 프로퍼티 사용 | 객체 없이 내부만 본다. |
apply |
this |
원래 객체 | 필드 초기화 | 객체를 구성한다. |
also |
it |
원래 객체 | 부수효과 | 지나가면서 한마디 |
1. let
객체를 it으로 참조하고, 람다의 결과값을 반환
주 사용 목적
- null-safe 처리 (
?.let) - 값 변환
- 체이닝 중 중간 결과 제공
예시
val nameLength = user.name?.let {
it.length // 반환값
}
it=user.name값let의 결과는it.length(Int)
2. run
객체를 this로 참조하고, 람다의 결과값을 반환
주 사용 목적
- 임시 블록에서 값 반환
예시
val greeting = user.run {
"Hello, $name!" // 마지막 표현식이 반환
}
this=user- 반환값 =
"Hello, 유저이름!" let과 달리this를 사용하므로 프로퍼티 접근 시this.name대신name만 써도 됨
3. with
인자로 받은 객체를 컨텍스트로 사용 (this)
람다의 결과값을 반환 (run과 유사)
run과의 차이점은 객체를 인자로 받는 일반 함수라는 점
예시
val result = with(user) {
"$name ($age 세)"
}
this=user- 반환값 =
"유저이름 (유저나이 세)"
4. apply
객체를 this로 참조하고, 객체 자신을 반환
주 사용 목적
- 객체 초기화 시 속성 설정 (빌더 패턴과 유사)
예시
val user = User().apply {
name = "Alice"
age = 30
}
this=User인스턴스- 반환값 = 속성 설정 된
User객체
5. also
객체를 it으로 참조하고, 객체 자신을 반환
주 사용 목적
- 로깅, 디버깅, 부수효과
- 객체를 유지하면서 추가 작업 수행
예시
val user = User("Alice").also {
println("Created user: ${it.name}")
}
it=User객체- 반환값 = 동일한
User객체 (변경되지 않음)