코틀린 언어 정리 2-15

class 확장(Extensions)

특징(제한) 및 사례 분석

(계속)...

컴패니언 오브젝트의 확장 ( Companion Object Extensions )

Companion Object에도 확장 함수, 프로퍼티를 추가할 수 있습니다.


예제

class A {

   companion object {

       var value1: Int = 10

   }

}


fun A.Companion.func1() {

   println("A.Companion.func1()")

}


fun main(args: Array<String>) {

   println(A.value1)

   A.func1()

   A.Companion.func1()

}


확장 import ( Scope of Extensions )

클래스(class)가 선언된 package의 외부에서 클래스를 사용하려면 클래스만 import를 하면 됩니다. 멤버 함수나 프로퍼티는 별도로 import를 할 필요가 없습니다. 그런데 확장으로 선언한 함수나 프로퍼티는 외부에서 이 방법으로 접근할 수 없습니다. 확장으로 선언된 함수나 프로퍼티를 외부에서 외부에서 참조 하려면 클래스 import와 별도로, 확장 함수나 프로퍼티를 각각 직접 import 해야 합니다.


예제

//sub.kt 파일에 저장

package kotlinlangTest


class A {

   fun func2() {

       println("A::func2()")

   }

}


fun A.func1() {

   println("A.func1 Extension")

}



//app.kt 파일에 저장

import kotlinlangTest.A

import kotlinlangTest.func1 // 확장 함수는 클래스와 별도로 import 해야 외부에서 사용할 수 있습니다.


fun main(args: Array<String>) {

   A().func2()

   A().func1()

}


위의 예제를 테스트 해보려면 소스 코드를 두개의 파일에 나누어 저장해야 합니다. 주의할 점은, 확장 함수를 import 할 때 클래스 이름을 별도로 명시하지 않습니다.



+ Recent posts