기록

Kotlin 커스텀 getter setter 완벽 정리 본문

[Study]/Kotlin

Kotlin 커스텀 getter setter 완벽 정리

Dannnnnn 2024. 4. 14. 15:18
반응형

Java에서 Kotlin을 처음 접할때 가장 생소하고 헷갈리는 것 중 하나가 Custom Getter Setter이다.

 

먼저 var과 val의 차이를 생각해보면, 당연히 val은 get만 사용 가능하다.

var 변수는 가져오면 get, set 둘 중 하나의 동작을 취할 수 있다.

 

이때 커스텀 기능은 get, set 중 원하는 동작을 개발자가 추가할 수 있다.

 

아래는 커스텀 set 예제 코드이다.

    private var productDetails = listOf<ProductDetails>()
        set(value) {
            field = value
            getProductDetails()
        }

 

이는 set을 부르는 순간에 getProductDetails() 를 호출하여 set할때마다 무조건 변수가 업데이트 되도록 한다.

이때 헷갈리는게 value와 field인데, 

value는 set하려고 하는 변수를 의미하고, field는 원래 변수인 productDetails를 의미한다.

 

그리고 모든 set의 기본값은 아래와 같다.

set에는 언제나 바꾸고자 하는 값이 들어감으로 매개변수로 value가 들어간다.

set(value) {
    field = value
}

 

그래서 코드를 이렇게만 치면 에디터에서 중복된 코드임으로 지우라는 권유를 한다.

 

마찬가지로, 모든 get의 기본값은 아래와 같다.

get은 단순히 변수를 불러오는 동작임으로 set과 달리 매개변수가 필요 없다.

역시 이렇게만 코드를 작성하면 중복이라는 메시지가 나온다.

get() = field

 

 

필자의 경우는 productDetails 변수를 여러곳에서 사용하고 있어 getProductDetails()을 여러번 작성하지 않으면서 해당 변수를 부를 때 업데이트를 시키기 위해 custom setter함수를 사용했다.

 

하지만 custom get set을 사용하면 디버깅이 원활하지 않을 수 있다는 단점이 있다.

 

때문에 만약 productDetails를 한 곳에서 사용한다면 set 작업을하는 부분 아래에 바로 getProductDetails() 함수를 호출했을 것이다.

 

custom getter setter의 용례를 잘 파악하고 때에 따라 적법한 코드를 작성하도록 하자.

반응형