Kotlin Scope function, Receiver function
2025. 11. 7. 11:34ㆍProgramming
- 목차
반응형
일반적인 함수 타입
val func: () -> Unit = {
...
}
val func: (String) -> Int = { str ->
str.length
}
func("hello") // 5스코프 함수
객체의 범위 내에서 코드 블록을 실행
특정 객체를 스코프(범위)에 넣고 작업
Kotlin 기본 제공 5개의 스코프 함수
|---|---|---|
| | name | 특징 | 기타 |
|1| apply | 자기 자신을 this로 설정 후 자신을 반환 | 체이닝 가능 |
|2| also | 쿠가 작업 수행 | it으로 자신을 접근 설정 후 자신을 반환 | 체이닝 가능 + it을 사용해서 좀 더 명확 |
|3| let | 변환 | it으로 자신을 접근해서 어떤 값을 명시적으로 반환 | 보통 반환되는 값이 변환 값 |
|4| run | 계산 변환 | this로 자신을 접근해서 어떤 값을 명시적으로 반환 | it로 접근하지 않아 코드가 더 단순화 됨 |
|5| with | 계산 변환 | run과 동일 | 예전 부터 있던 기능 |also
apply는 객체 설정 시 사용됩니다.
자기 자신을 반환합니다.
val textView = TextView(context).apply {
text = "Hello"
textSize = 16f
setTextColor(Color.BLACK)
}.also {
layout.addView(it) // textView 객체 사용
}apply는 this를 생략할 수 있기 때문에 동일 변수명이 사용된 경우 헷갈릴 수 있다.
체이닝 가능
// 체이닝
person.apply {
name = "John"
}.apply {
age = 30
}.apply {
address = "Seoul"
}also
also는 부가 작업 (또한 이런것도 수행해...)
val file = File("a.txt")
.also { println("${it.name}") }
.also { println("${it.length()}) }let
let은 변환
val length = "Hello".let { // let은 현재 객체로 변환 (해서 반환)
it.length
}run
run은 복잡한 초기화
명시적 리턴 값을 반환
val isValid = person.run {
updateAge(30)
validate() // boolean 반환
}with는 같은 객체 메서드 반복 호출
val res = with(person) {
getName() + getAget()
}리시버 함수 타입
val func: String.() -> Int = {
length
}
val len = "hello".func()this를 생략할 수 있으며, 물론 this.로도 접근 가능
실제 객체를 통해 리시버 함수를 호출해야 한다는 것에 주의
리시버 함수와 스코프 함수 혼합 예
반응형
'Programming' 카테고리의 다른 글
| Kotlin: flatMapLatest (0) | 2025.11.07 |
|---|---|
| 오픈소스 라이센스 (0) | 2022.12.13 |
| Makefile %.o: %.cpp pattern (0) | 2022.09.29 |
| cmake 옵션(option) 사용 (0) | 2022.09.27 |
| build shared lib on macOS (0) | 2022.09.27 |