코틀린은 스코프 함수를 사용하여 컬렉션에 대한 간단하고 효과적인 조작을 할 수 있다. 스코프 함수에는 apply
, let
, run
, with
, 및 also
가 있다. 이러한 스코프 함수를 사용하면 코드 블록 내에서 객체의 속성을 쉽게 조작하고, null 체크 또는 연속된 함수 호출을 줄일 수 있다.
1. apply
함수
apply
함수는 수신 객체를 초기화하고 속성을 설정한 후 해당 객체를 반환한다. 주로 객체의 초기화 또는 구성에 사용된다.
data class Person(var name: String, var age: Int)
val person = Person("Alice", 25).apply {
age = 30
}
apply
함수를 사용하면 객체를 생성하고 속성을 초기화 한 후 즉시 속성을 변경할 수 있다.
2. let
함수
let
함수는 수신 객체를 사용하여 결과를 반환하거나 다른 처리를 수행할 수 있다. null 안전성을 갖는 컬렉션의 항목에 대해서 안전하게 적용할 수 있다.
val numbers: List<Int?> = listOf(1, 2, null, 4)
val evenNumbers = numbers.mapNotNull { it?.times(2) }
.let {
println("Even numbers: $it")
it.filter { it % 4 == 0 }
}
let
함수를 사용하면 null이 아닌 값을 매핑하고, 결과를 처리하는 동시에 중간 결과를 출력할 수 있다.
3. run
함수
run
함수는 수신 객체에서 독립적인 코드 블록을 실행하고 결과를 반환한다. 함수 내에서 수신 객체의 함수 또는 속성에 쉽게 접근할 수 있다.
val message = run {
val from = "Alice"
val to = "Bob"
"Hello, $to! - from $from"
}
run
함수를 사용하면 코드 블록 안에서 새로운 범위를 생성하고 결과를 반환할 수 있다.
4. with
함수
with
함수는 수신 객체의 함수 및 속성에 접근할 수 있는 범위를 제공한다. 단일 수신 객체에 대한 코드 블록을 실행할 때 유용하다.
val person = Person("Alice", 25)
val bio = with(person) {
"Name: $name, Age: $age"
}
with
함수를 사용하면 person
객체의 범위 안에서 속성에 바로 접근하고 결과를 만들어낼 수 있다.
5. also
함수
also
함수는 수신 객체를 사용하여 추가적인 처리를 수행하거나 로깅할 때 사용한다. 주로 객체의 속성을 변경하지 않고 추가 작업을 수행할 때 유용하다.
val numbers = mutableListOf(1, 2, 3)
numbers.also {
println("Elements before adding: $it")
}.add(4)
also
함수를 사용하여 numbers
컬렉션에 요소를 추가하기 전에 컬렉션의 현재 상태를 출력할 수 있다.
코틀린의 스코프 함수를 활용하여 컬렉션 조작을 간소화하고 더 읽기 쉬운 코드를 작성할 수 있으며, null 안전성을 갖춘 코드를 작성하는 데 도움이 된다.