본문 바로가기
Android 개발/Kotlin

Kotlin custom getter 와 setter 구현하기

by Developer88 2023. 4. 11.
반응형

Kotlin 에서는 Custom 하게 getter 와 setter 를 구현할 수 있는데요.

오늘은 이것에 대해서 알아보고, 활용 사례까지 정리해 보겠습니다.

 

1. Custom Getter 와 Setter

Kotlin은 우리가 특별히 무엇을 하지 않아도,

알아서 getter 와 setter 를 만들어 줍니다.

Java에서는 class의 길이가 길었었는데, 덕분에 Kotlin에서는 매우 간결해 졌습니다.

그런데, 우리는 때로 override 해서 다른 방식으로 get하거나 set을 해야할 때가 있는데요.

이것을 하는 것을 보도록 하겠습니다.

 

1-1. Custom Getter

아래와 같이 age를 정의할 경우,

custom하게 getter를 설정하려면 아래와 같이 해주면 됩니다.

get()을 넣어주고, 수식으로 아래와 같이 간단히 표현할 수 있습니다.

정말 간단하지요.

 

var age: Int = 0
    get() = field * 2

 

1-2. Custom Setter

이제 Setter를 보도록 하겠습니다.

Setter도 마찬가지로 아래와 같이 쉽게 구현할 수 있습니다.

 

var memo: String = ""
    set(value) {
        field = value.trim().toUpperCase()
    }

 

 

1-3. Custom Setter 와 캡슐화

원래의 캡슐화, 즉 set하는 것을 숨기기 위해서는 set하는 함수도 만들고 코드가 길어지는데요.

이것을 Custom Setter를 이용해서 아래와 같이 쉽게 구현할 수 있습니다.

name변수는 public하게 공개되어서 다른 곳에서 사용할 수 있지만,

set은 MyClass내부에서만 사용이 가능합니다.

 

class MyClass {
    var name: String = ""
        private set
}

 

viewModel에서 아래와 같이 구현하는 경우들이 있지요.

아래와 같이 하게되면, UI에서는 값을 set하지 못하게 하는 것 입니다.

 

var memo by mutableStateOf<String>("test memo")
    private set

 

1-4. 활용 사례

아래는 viewModel에서 currentOffset값을 커스텀한 형태로  get()하고 set()하는 코드입니다.

화면전환등 configuration 변경에도 값을 유지하기 위해서 아래와 같은 방법을 사용하였습니다.

이렇게 해주면, get 하거나 set 할때, 아래의 긴코드들을 매번 작성할 필요가 없어집니다.

 

private var currentOffset
    get() = savedStateHandle.get<Int>(CURRENT_OFFSET_KEY) ?:  DEFAULT_OFFSET
    set(value) = savedStateHandle.set(CURRENT_OFFSET_KEY, value)

 

728x90

댓글