범위 함수란?
Kotlin에서 객체를 특정 범위(scope) 내에서 처리할 수 있게 도와주는 함수로, 객체의 컨텍스트에서 작업을 수행하는 간결한 방법을 제공한다. 주로 코드의 가독성을 높이고 객체를 효율적으로 처리하기 위해 사용된다.
범위함수에는 let, also, apply, with, run이 있다.
- let: 지정된 값에 대한 변환 작업을 수행하고, 결과를 반환한다.
- also: 지정된 값을 그대로 반환하면서, 부수적인 작업(로깅, 디버깅 등)을 수행한다. 주로, 객체를 참조하는 목적으로 사용
- apply: 객체의 속성을 변경하는 작업을 하고, 객체 자체를 반환한다. 주로, 객체를 참조하는 목적으로 사용
- with: 특정 객체에 대해 여러 작업을 수행하고, 결과를 반환한다.
- run: 블록 안에서 객체의 작업을 수행하고, 실행 결과를 반환한다. (let과 비슷하지만 널 검사를 위한 용도로는 잘 안 씀)
also와 apply
class Person(var name: String, var age: Int) // 람다 지정 수신자 객체
fun main(){
val park = Person("Park", 32)
park.also { //속성 참조
println("${it.name}, ${it.age}")
}
val lee: Person = park.apply { //속성 참조와 변경
this.name = "Lee"
this.age = 28
}
}
also
부수적인 작업을 할 때 사용한다. 객체 자체는 변경하지 않고 반환한다.
속성 변경은 가능하지만, 주 목적은 객체의 변경 없이 부가적인 작업을 하는 것에 있다.
apply
객체의 속성을 변경하고 그 객체 자체를 반환한다.
this를 사용해서 객체의 속성을 접근하고, 주로 객체의 속성을 변경하는데 사용한다. 변경 후, 변경된 객체 자체를 반환한다.
run
fun main(){
val word: String = "kotlin"
val upperLetter = word.run {
this.uppercase()
}
println(upperLetter) //KOTLIN
}
run은 블록 내부의 객체 작업을 수행하고 실행결과를 반환한다.
with
data class Person(var name: String = "", var age: Int = 0)
fun main(){
val kim = Person()
with(kim){
this.name = "kim"
this.age = 20
}
}
with은 객체에 대해서 여러 작업을 수행한 후, 결과 값을 반환한다.
with과 apply는 뭐가 다를까?
with 객체에 대한 여러 작업을 수행하고 그 결과 값을 반환하지만, apply는 객체의 속성을 변경하고 객체 자체를 반환한다.
let
fun main() {
val word: String? = "KOTLIN"
val smallLetter = word?.let {
it.lowercase()
}
}
let은 해당 값이 null인 경우 아무 작업을 하지 않지만, null이 아닌경우 블럭 내부의 작업을 진행한다.
'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글
Array, Generic, Collection) Array(2) - 배열 관련 연산 (0) | 2024.10.11 |
---|---|
Array, Generic, Collection) Array(1) - 배열의 생성 (0) | 2024.10.11 |
Class(2) - data class (0) | 2024.10.11 |
Class(2) - 클래스의 기본 메소드 정의 (0) | 2024.10.11 |
Class(2) - Object (0) | 2024.10.11 |