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의 경우에는 특별한 이유가 없다면 함수를 사용하면 안 됩니다.