유용한 표준 함수 (apply, let, run, with, also) - swkim0128/PARA GitHub Wiki
코틀린에서는 객체 조작 및 코드 가독성을 향상시키기 위해 다양한 **스코프 함수(Scope Function)**를 제공한다. 대표적으로 apply, let, run, with, also가 있으며, 각각의 역할과 특징이 다르다.
함수 | 반환값 | 객체 참조 방식 | 사용 목적 |
---|---|---|---|
apply | 객체 자체 | this | 객체의 속성을 변경 후 반환 |
let | 람다 결과 값 | it | 객체 변환, 널 안정성 처리 |
run | 람다 결과 값 | this | 객체를 사용한 작업 실행 후 결과 반환 |
with | 람다 결과 값 | this | 특정 객체의 연산 수행 후 결과 반환 |
also | 객체 자체 | it | 객체를 참조하여 부가적인 작업 수행 |
apply는 객체의 속성을 변경하고, 해당 객체를 반환하는 함수이다. 보통 객체를 생성한 후 속성을 설정할 때 사용한다.
예제
data class User(var name: String, var age: Int)
fun main() {
val user = User("John", 25).apply {
name = "Alice"
age = 30
}
println(user) // 출력: User(name=Alice, age=30)
}
✅ 객체 속성을 변경한 후 객체 자체를 반환하므로, 변수 할당이 가능하다. ✅ 코드가 간결해지고, 객체 초기화 코드와 변수 할당이 분리되지 않는다.
let은 객체를 변환하거나 널(null) 체크를 할 때 유용하다. 람다의 결과 값을 반환하며, 객체는 it 키워드로 참조한다.
예제 1: let을 활용한 변환
fun main() {
val name = "Kotlin".let {
it.uppercase()
}
println(name) // 출력: KOTLIN
}
예제 2: let을 활용한 널 안전성 처리
fun main() {
val name: String? = "Kotlin"
name?.let {
println("이름: $it") // 출력: 이름: Kotlin
}
}
✅ let은 null이 아닌 경우에만 실행되므로, ?.let {}을 활용하면 널 체크를 쉽게 할 수 있다. ✅ 객체를 변환하는 용도로도 활용할 수 있다.
run은 객체를 사용하여 특정 작업을 실행하고, 그 결과를 반환한다. apply와 비슷하지만, 반환값이 람다의 실행 결과라는 점이 다르다.
예제 1: 객체 초기화 및 변환
fun main() {
val user = User("Bob", 22)
val message = user.run {
"이름: $name, 나이: $age"
}
println(message) // 출력: 이름: Bob, 나이: 22
}
✅ 객체의 속성을 참조하면서 특정 결과를 도출할 때 사용한다. ✅ 반환값이 람다 내부의 실행 결과이므로, 특정 값을 생성할 때 유용하다.
with는 객체를 특정 작업에 활용할 때 사용되며, run과 비슷하지만, 객체를 직접 받는 것이 아니라 인자로 전달한다.
예제
fun main() {
val user = User("Charlie", 28)
val info = with(user) {
"이름: $name, 나이: $age"
}
println(info) // 출력: 이름: Charlie, 나이: 28
}
✅ 객체를 첫 번째 인자로 받고, 내부에서 this를 사용하여 속성을 참조할 수 있다. ✅ with는 객체를 직접 반환하지 않고, 특정 연산 결과를 반환하는 데 사용된다.
also는 객체를 변경하지 않으면서, 부가적인 작업(로깅, 디버깅 등)을 수행할 때 사용한다. apply와 비슷하지만, 객체를 it으로 참조한다.
예제
fun main() {
val user = User("Dave", 35).also {
println("새로운 사용자 생성: ${it.name}, 나이: ${it.age}")
}
}
출력:
새로운 사용자 생성: Dave, 나이: 35
✅ 객체를 반환하지만, 원래 객체를 변경하지 않고 부가적인 작업을 수행하는 데 사용된다.
함수 | 반환값 | this / it | 사용 목적 |
---|---|---|---|
apply | 객체 자체 | this | 객체의 속성을 변경 후 반환 |
let | 람다 결과 값 | it | 객체 변환, 널 처리 |
run | 람다 결과 값 | this | 특정 작업 실행 후 결과 반환 |
with | 람다 결과 값 | this | 특정 객체에서 연산 수행 후 결과 반환 |
also | 객체 자체 | it | 객체를 참조하여 부가 작업 수행 |
- 객체 설정 및 반환 → apply
- 널 체크 및 변환 → let
- 객체 실행 및 결과 반환 → run
- 특정 객체에서 연산 수행 → with
- 객체를 참조하여 로깅 또는 디버깅 → also
- 코틀린 표준 함수(apply, let, run, with, also)는 코드 가독성을 높이고, 코드 중복을 줄이는 데 유용하다.
- 각 함수의 반환값과 참조 방식(this / it)을 이해하면 적절한 상황에서 사용할 수 있다.
- 널 체크(let), 객체 초기화(apply), 실행(run), 연산 수행(with), 부가 작업(also)을 적절히 활용하면 더 깔끔한 코드를 작성할 수 있다.
💡 이 표준 함수를 적절히 활용하면 더 간결하고 효율적인 코드를 작성할 수 있다! 🚀