본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Class(2) - 범위 함수

by print_soo 2024. 10. 11.

범위 함수란?

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이 아닌경우 블럭 내부의 작업을 진행한다.