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)
'Android 개발 > Kotlin' 카테고리의 다른 글
Destructuring declaration 에 대해 알아보자 # 구조분해 선언 Kotlin (0) | 2023.05.01 |
---|---|
Kotlin Escape 에 대한 정리 # RawString Escaped String Literal (0) | 2023.04.30 |
Kotlin GroupBy 구현과 정리 # List 그룹핑 (0) | 2023.04.28 |
getOrNull 과 getOrElse 에 대한 정리 # List Kotlin (0) | 2023.04.28 |
Kotlin Pair 와 Map 함수 이용해서 데이터 가공하기 (0) | 2023.04.26 |
isNullOrEmpty 와 isNullOrBlank 의 차이점 # Kotlin (0) | 2023.04.09 |
lateinit 에 관한 정리 # Kotlin (0) | 2023.04.07 |
Elvis 연산자 의 활용법 총정리 # null 체크 throw (0) | 2023.01.15 |
require 와 Check 로 코드에 조건 부여하기 # Kotlin (0) | 2023.01.14 |
Java 프로젝트에 Kotlin 추가하기 # Android Studio (0) | 2022.12.14 |
댓글