확장 함수는 어떤 클래스의 멤버 메소드인 것처 럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수입니다.
확장 함수를 만들려면 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 덧붙이기만 하면 됩니다. 이때 클래스의 이름을 수신 객체 타입이라고 부르며, 확장함수가 호출되는 대상이 되는 값을 수신 객체라고 합니다.
수신 객체 타입은 확장이 정의될 클래스의 타입이며. 수신 객체는 그 클래스에 속한 인스턴스 객체입니다.
//CommonResponse : 수신 객체 타입
//this : 수신 객체
fun CommonResponse.isSuccess(): Boolean {
return this.data == "success"
}
- 심지어 자바나 코틀린 등의 언어 중 어떤 것으로 작성됐는가는 중요하지 않습니다. 예를 들어 그루비와 같은 다른JVM 언어로 작성된 클래스도 확장할 수 있습니다. 자바 클래스로 컴파일한 클래스 파일이 있는 한 그 클래스에 원하는 대로 확장을 추가할 수 있습니다.
- 확장 함수 내부에서는 일반적인 인스턴스 메소드의 내부에서와 마찬가지로 수신 객체의 메소드나 프로퍼티를 바로 사용할 수 있습니다. 하지만 확장 함수가 캡슐화를 깨지는 않는다는 사실을 기억해야 합니다.
- 클래스 안에서 정의한 메소드와 달리 확장 함수 안에서는 클래스 내부에서만 사용할 수 있는 private 멤버나 protected 멤버를 사용할 수 없습니다.
- 확장 함수는 단지 정적 메소드 호출에 대한 문법적인 편의일 뿐입니다. 그래서 클래스가 아닌 더 구체적인 타입을 수신 객체 타입으로 지정할 수도 있습니다.
- 확장 함수를 하위 클래스에서 오버라이드할 수는 없습니다.
- as 키워드를 사용하면 임포트한 클래스나 함수를 다른 이름으로 부를 수 있습니다.
//as 키워드를 사용하면 임포트한 클래스나 함수를 다른 이름으로 부를 수 있습니다.
import strings.lastChar as last
val c = ’Kotlin”.last ()
[ 출처 : Kotlin In Action ]
728x90
반응형
'Language > Kotlin In Action' 카테고리의 다른 글
[Kotlin In Action] 인터페이스 (0) | 2021.04.22 |
---|---|
[Kotlin In Action] 가변 인자 (0) | 2021.04.22 |
[Kotlin In Action] 문자열 템플릿 (0) | 2021.04.13 |
[Kotlin In Action] 변수 (0) | 2021.04.13 |
[Kotlin In Action] 함수 (0) | 2021.04.13 |
댓글