field를 통해 내부 변수에 접근해야 한다는 점에 유의해야 함.
var state: State? = null
set(value) {
field?.leave()
field = value
field?.enter()
}
get() = field

공간정보시스템 / 3차원 시각화 / 딥러닝 기반 기술 연구소 @지오서비스(GEOSERVICE)
field를 통해 내부 변수에 접근해야 한다는 점에 유의해야 함.
var state: State? = null
set(value) {
field?.leave()
field = value
field?.enter()
}
get() = field
Inner Class는 어떤 클래스(A라고 하자)의 내부에 정의되는데.. 이 Inner Class는 바로 객체화 될수 없고, 먼저 A 클래스를 객체화한 뒤 객체화된 것을 통해 생성된다.
아래는 코틀린의 문법 중 Inner Class에 대한 예제이다.
open class Base {
open val c: String = "Dip2K"
open fun f() = println("Programmer, ${c}")
}
class Derived: Base() {
override val c: String = "Super ${super.c}"
override fun f() = println("Developer, ${c}")
inner class InnerClass {
constructor() {
println("InnerClass's constructor")
}
fun f() = println("InnerClass's fun: f")
fun t() {
f()
Derived().f()
super@Derived.f()
}
}
}
fun main() {
val c = Derived()
val i = c.InnerClass()
i.t()
}
Inner Class를 기준으로 바깓 클래스 및 그 바깓 클래스의 부모 클래스에 대한 프로퍼티와 함수에 대한 접근에 대한 문법을 나타내고 있다. 실행결과는 다음과 같다.
InnerClass's constructor InnerClass's fun: f Developer, Super Dip2K Programmer, Super Dip2K