Kotlin/Effective Kotlin 요약

16장 - 프로퍼티는 동작이 아니라 상태를 나타내야 한다

Junuuu 2023. 2. 15. 00:01
반응형

코틀린의 프로퍼티는 자바의 필드와 비슷해 보입니다.

//Kotlin의 프로퍼티
var name: String? = null
//Java의 필드
String name = null;

 

둘은 유사해 보이지만 프로퍼티는 사용자 정의 게터와 세터를 가질 수 있습니다.

fun main() {
    val custom = Custom()
    println(custom.myClassField)
    custom.myClassField = "hi"
    println(custom.myClassField)
}

class Custom{
    var myClassField: String = "hi"
    get(){
        if(field == "hi") {
            return "안녕"
        }
        return field
    }
    set(value){
        field = "customSetter"
    }
}

이처럼 프로퍼티를 함수 대신 사용할 수 있지만, 완전히 대체해서 사용하는 것은 좋지 않습니다.

만약 많은 계산양이 필요할 경우 사용자는 관습적으로 게터에서 그런 계산량이 필요하다고 예상하지 못할 수 있습니다.

 

원칙적으로 프로퍼티는 상태를 나타내거나 설정하기 위한 목적으로 사용하는 것이 좋고 다른 로직 등을 포함하지 않아야 합니다.

 

구체적으로 프로퍼티 대신 함수를 사용하는 것이 좋은 경우

- 시간복잡도가 O(1) 보다 큰 경우

- 비즈니스 로직을 포함하는 경우

- 결정적이지 않은 경우(멱등성이 없는 경우)

- 형변환이 일어나는 경우

- 게터에서 프로퍼티의 상태 변경이 일어나야 하는 경우

 

반대로 getter setter의 경우에는 특별한 이유가 없다면 함수를 사용하면 안 됩니다.