코틀린 언어 정리 2-13

class 확장(Extensions)

특징(제한) 및 사례 분석

(계속)...

확장 함수 제약(this, super)

this

확장함수는 리시버 클래스 외부에 선언하는데 이 때 전역에 선언할 수도 있고 다른 클래스 내부에 선언할 수도 있습니다. 전역에 선언하는 경우 this는 혼동할 여지 없이 리시버 객체를 접근하는 것으로 생각할 수 있습니다. 그런데 다른 클래스 내부에 선언한 경우라면 혼동의 여지가 있을 수도 있습니다. this로 가리킬 수 있을 것 같은 객체가 리시버 객체와, 자신의 선언을 포함한 객체 두 가지가 있기 때문입니다. 이 경우 리시버 객체는 this, 자신의 선언을 포함한 객체는 this@클래스이름 의 방법으로 접근할 수 있습니다.


super

super는 사용 불가능 합니다.


확장 프로퍼티 제약

확장 프로퍼티는 backing field를 가질 수 없어 상태를 저장하지 못하므로 초기화도 불가능합니다. 따라서 getter / setter를 통해 명시적으로 선언하는 방법을 사용해야 합니다.


예제

class A {}


var A.var1: String

   get() {

       return "A.var1 Extension"

   }

   set(value) {}

//var A.var2: String = "A.var2 Extension" // 컴파일 에러


fun main(args: Array<String>) {

   println(A().var1)

}



+ Recent posts