개발자 강경완

코틀린(Kotlin)의 프로퍼티에 대해 알아보자! 본문

IT/Kotliin

코틀린(Kotlin)의 프로퍼티에 대해 알아보자!

경완군 2018. 3. 4. 11:55

프로퍼티

프로퍼티

  • 자바는 보통 클래스를 만들 때 캡슐화를 하기 위해 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")
    }

 

0 Comments
댓글쓰기 폼