Open DolphaGo opened 2 years ago
코틀린을 가볍게 사용해보면서 function과 value 지정이 굉장히 자유롭다고 생각을 했다. 즉, function <-> value 형태로 자유롭게 바꿔도 된다고 생각했지만, 그것은 착각이었음을 알게 되었다.
data class MyTestDto( val data : Object ) { var reason: String? = null }
위와 같은 상황에서 객체 초기화 이후에 validation을 각각 진행한다고 생각해보자. 그렇게 되면, validation 결과에 따라, 처리가 되지 않는 이유에 대해서 reason이 세팅이 된다.
만약, 내가 다음과 같이 value 형태로 isValid를 짰다면 어떤 결과가 나올까?
data class MyTestDto( val data : Object ) { var reason: String? = null val isValid: Boolean = StringUtils.isBlank(reason) }
위의 결과로는 isValid는 항상 true가 나온다.
validation을 태운 뒤 비즈니스 로직 때마다 reason이 비어있는지 아닌지 활용하고 싶다면, 다음과 같이 function을 써야한다.
data class MyTestDto( val data : Object ) { var reason: String? = null fun isValid(): Boolean = StringUtils.isBlank(reason) }
만약 value 형태로 작성하고 싶다면, 다음과 같이 getter를 이용하면 된다.
val isValid: Boolean get() = StringUtils.isBlank(reason)
하지만, 의미상 function이 맞기에, 위와 같은 상황에서는 function을 사용하도록 하자.
출처: 이펙티브 코틀린
코틀린을 가볍게 사용해보면서 function과 value 지정이 굉장히 자유롭다고 생각을 했다. 즉, function <-> value 형태로 자유롭게 바꿔도 된다고 생각했지만, 그것은 착각이었음을 알게 되었다.
위와 같은 상황에서 객체 초기화 이후에 validation을 각각 진행한다고 생각해보자. 그렇게 되면, validation 결과에 따라, 처리가 되지 않는 이유에 대해서 reason이 세팅이 된다.
만약, 내가 다음과 같이 value 형태로 isValid를 짰다면 어떤 결과가 나올까?
위의 결과로는 isValid는 항상 true가 나온다.
validation을 태운 뒤 비즈니스 로직 때마다 reason이 비어있는지 아닌지 활용하고 싶다면, 다음과 같이 function을 써야한다.
만약 value 형태로 작성하고 싶다면, 다음과 같이 getter를 이용하면 된다.