References: Do it! 코틀린 프로그래밍
코틀린에서 Getter와 Setter를 커스텀하는 방법에 대해 알아봅니다.
1. 사용자 정의 게터 및 세터
코틀린에서 게터와 세터는 별도의 작업없이 자동으로 생성되어 "." 를 통해 사용할 수 있습니다.
만약 게터와 세터에 추가적인 작업이 필요하다면 사용자가 직접 정의하여 사용할 수 도 있습니다.
다음 예시에서 확인해 보도록 하겠습니다.
class User(_id: Int, _name: String, _age: Int){
val id: Int = _id
var name: String = _name
set(value){
println("The name was changed.")
field = value.toUpperCase()
}
var age: Int = _age
}
- User(1, "test", 28): 주 생성자를 이용해 객체를 생성합니다. 세터는 사용되지 않았습니다.
- user.name = "smoh": 세터를 사용해 name의 값을 변경합니다. 대문자로 저장됩니다.
위 예시에서 세터는 입력받은 값을 대문자로 변경하고 저장합니다.
결괏값은 다음과 같습니다.
2. 보조 프로퍼티의 사용
임시적으로 사용할 프로퍼티를 선언한 후에 게터나 세터에서 사용할 수 도 있습니다.
다음 예시로 확인해 보겠습니다.
class User(_id: Int, _name: String, _age: Int){
val id: Int = _id
private var tempName: String? = null
var name: String = _name
get(){
if(tempName == null) { tempName = "NONAME" }
return tempName ?: throw AssertionError("Asserted by others")
}
var age: Int = _age
}
fun main() {
val user = User(1, "smoh", 28)
user.name = ""
println("user.name = ${user.name}")
}
- private var tempName: String? = null: 이름이 null이 되는 경우를 처리하기 위한 보조 프로퍼티
위 예시의 실행 결과는 다음과 같습니다.
3. 프로퍼티 오버 라이딩
프로퍼티는 기본적으로 final로 선언되어 오버 라이딩이 불가합니다. 만약 오버 라이딩을 하고 싶다면 open키워드를 통해 프로퍼티를 선언해야 합니다.
다음 코드를 통해 확인해 봅시다.
open class First{
open val a: Int = 0
get(){
println("First a")
return field
}
val b: Int = 0
}
class Second: First() {
override val a: Int = 0
get(){
println("Second a")
return field +1
}
}
fun main() {
val sec = Second()
println(sec.a)
println(sec.b)
}
- open val a: Int = 0: 프로퍼티 a를 오버라이드 가능한 상태로 선언합니다.
- override val a: Int = 0: 프로퍼티 a를 오버라이드 합니다.
위 코드의 실행 결과는 다음과 같습니다.
b에는 open 키워드가 없어 오버 라이딩이 불가능합니다. 만약 val로 프로퍼티를 선언했다면 오버라이딩이 불가능합니다.
반응형
'Programming' 카테고리의 다른 글
[Kotlin] 27. 지연 초기화: lazy (0) | 2019.08.27 |
---|---|
[Kotlin] 26. 지연초기화: lateinit (0) | 2019.08.27 |
[Kotlin] 24. 클래스 혹은 객체간의 관계 (0) | 2019.08.27 |
[Kotlin] 23. 다형성(Polymorphism) (0) | 2019.08.24 |
[Kotlin] 22. 상속(Inheritance) (0) | 2019.08.24 |