더북(TheBook)

var로 정의하는 가변 프로퍼티에는 값을 읽기 위한 게터와 값을 설정하기 위한 세터(setter)라는 두 가지 접근자가 있다. 예제를 살펴보자.

class Person(val firstName: String, val familyName: String) {
  var age: Int? = null
    set(value) {
      if (value != null && value <= 0) {
        throw IllegalArgumentException("Invalid age: $value")
      }
      field = value
    }
}

fun main() {
  val person = Person("John", "Doe")
  person.age = 20     // 커스텀 세터를 호출
  println(person.age) // 20 (커스텀 게터를 호출)
}

프로퍼트 세터의 파라미터는 단 하나이며, 타입은 프로퍼티 자체의 타입과 같아야 한다. 보통은 파라미터 타입을 항상 미리 알 수 있기 때문에 세터에서는 파라미터 타입을 생략한다. 관습적으로 파라미터 이름을 value로 정하는 경우가 많지만 원하는 다른 이름을 붙여도 좋다.

프로퍼티를 초기화하면 값을 바로 뒷받침하는 필드에 쓰기 때문에 프로퍼티 초기화는 세터를 호출하지 않는다는 점에 유의하라.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.