코틀린은 OOP Encapulation 되어 만들어진 State(Data, Field)에 접근할 수 있는 getter와 setter를 언어 기본 기능으로 지원한다. OOP에서 클래스는 캡슐화된 데이터를 메소드를 통해 제어 및 접근하는 것을 원칙으로 한다. Field에 접근하는 get/set(value)를 모두 포함해서 property라고 부른다.
Property를 선언할 때 반드시 val 또는 var가 존재해야 한다.
val: 읽기 전용(get) 속성만 갖는다.
var: 읽기(get)와 쓰기(set) 속성을 갖는다.
val, var로 선언된 property는 컴파일 시 private 접근지정자로 지정된다.
Backing Field(뒷받침 필드)
Kotlin에서는 Backing Field를 사용할 수 있는데 이는 속성의 getter와 setter를 재정의하여 속성값을 수정, 비교 등을 할 때 사용할 수 있다.
class Person {
val name = "Hong gil dong"
get() = field.uppercase() // -> name을 대문자로 변경
var age: Int = 32
set(value) {
field += value // -> age를 value 만큼 추가
}
var gender: String = ""
set(value) {
field = "$name 님은 $value"
}
}
fun main() {
val person = Person()
println("이름: ${person.name}") // -> name 속성의 get 호출
person.age = 3 // -> age 속성의 set(value) 호출
println("나이: ${person.age}")
person.gender = "남자" // -> gender 속성의 set(value) 남/녀 비교
println(person.gender)
}
결과
이름: HONG GIL DONG
나이: 35
HONG GIL DONG 님은 남자