본문 바로가기
Android

[Kotlin] apply, with, let, ?: 사용하기

by bryan.oh 2023. 7. 25.
반응형

아래와 같이 Person 이라는 class 가 있을 때,

data class Car(
    var model: String? = null,
    var price: Int? = null,
    var brand: String? = null
) {
    override fun toString(): String {
        return "Car : [$model, $price, $brand]"
    }
}

 

일반적으로 다음과 같이 초기화 합니다.

var car1: Car? = Car()
car1?.model = "x"
car1?.price = 50000000
car1?.brand = "tesla"

print(car1?.toString())
// Car : [x, 50000000, tesla]

 

 

apply

다음과 같이 사용할 수 있습니다.

val car2 = Car().apply {
    model = "y"
    price = 60000000
    brand = "tesla"

    val info = toString()
    print(info)
    // Car : [y, 60000000, tesla]
}

// car2 에 반영됨.
car2.price = 80000000
print(car2.toString())
// Car : [y, 80000000, tesla]

 

with

val car04 = Car("K", 100000000, "Tesla")
with(car04){
    println(model)  // K
    println("price : $price") // price : 100000000
    println(brand)  // Tesla
    println(toString())  // Car : [K, 100000000, Tesla]
    price = 110000000
}
println(car04.toString())  // Car : [K, 110000000, Tesla]

반환을 할 필요가 없을 때 사용하긴 하지만 with 문 안에서 필드 값을 변경하면, 값이 실제로 변경됩니다.

 

 

let

만약 car 객체가 nullable로 선언되었다면, 아래와 같이 ? 를 계속해서 써줘야합니다.

var car00: Car? = null
// car00 = Car("U", 100, "tesla")

println("model = ${car00?.model}")
println("price = ${car00?.price}")
println("brand = ${car00?.brand}")

여기서 let 을 사용해 아래와 같이 사용할 수 있습니다.

var car00: Car? = null
car00 = Car("U", 100, "tesla")

car00?.let {
    println(it.model)		// U
    print(it.toString())	// Car : [U, 100, tesla]
} ?: run {
    print("car00 is null!")
}
var car00: Car? = null

// 아래 줄을 주석처리 하면, car00 은 null 이므로
// car00 = Car("U", 100, "tesla")

car00?.let {
    println(it.model)
    print(it.toString())
} ?: run {
    print("car00 is null!")	// car00 is null!
}

 

?:

fun getName(name: String?): String{
    var userName = name?: "Unknown"
    return userName
}

val user1 = getName(null)
print(user1)
// Unknown

 

 

 

728x90
반응형

댓글