프로퍼티
프로퍼티
- 자바는 보통 클래스를 만들 때 캡슐화를 하기 위해 private 된 멤버변수와 getter, setter로 만든다
- 자바는 보통 위의 필드와 접근자를 묶어 프로퍼티라고 부른다.
- 코틀린에서는 필드변수를 만드는 순간 디폴트 프로퍼티가 만들어지므로 접근자만 설정하면 된다.
class ChatData(val nickname: String, var message: String)
- 클래스 시간에 봤던 것 처럼 val 로 선언하면 getter만, var 로 선언하면 getter, setter 가 자동으로 만들어진다.
- 자바에서 불러올 때는
getNickname()
처럼 불러올 수 있다.
커스텀 접근자
class ChatData(var nickname: String, var message: String) {
var name: String = ""
get() = if(nickname.length > 0) nickname else "이름없음"
set(value) {
setStringLowerCase(value)
}
}
프로퍼티에 접근 할 때 getter, setter를 새로 지정해 변수를 초기화하거나 다른 일을 할 수도 있다.
val isEmpty get() = this.size == 0
- 코틀린 1.1 이후로부터는 getter로 부터 타입을 유추할 수 있으면 타입 조차 생략할 수 있습니다.
백킹 필드(Backing Fields)
필드는 Kotlin 클래스에서 직접 선언할 수 없습니다.
var counter = 0
set(value) {
if (value >=0) counter = value else 0
}
와 같이 구성을 했다고 칩시다.
Kotlin에서는 Test.counter = 100
, 자바에서는 Test.setCounter = 100
을 호출할 것입니다.
그래서 setter 함수가 호출될 때 set(value) { if (value > 0) counter = value else 0 }
이 실행되면 재귀 호출이 발생하므로 오류가 납니다.
var counter = 0
set(value) {
if (value >=0) field = value
}
그래서 Kotlin 은 filed 식별자를 제공합니다.
filed 식별자를 이용하면 backing field에 접근할 수 있습니다.
백킹 프로퍼티 (Backing Properties)
- 백킹 필드를 사용하고 싶지 않으면 백킹 프로퍼티를 사용하세요
private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
get() {
if (_table == null) {
_table = HashMap() // Type parameters are inferred
}
return _table ?: throw AssertionError("Set to null by another thread")
}
'IT > Kotliin' 카테고리의 다른 글
코틀린(Kotlin)의 클래스에 대해 알아보자! (1) | 2017.06.24 |
---|---|
코틀린(Kotlin)의 함수와 변수! (0) | 2017.06.19 |
코틀린(Kotlin) 시작하기! (0) | 2017.06.10 |