3.3 확장 함수와 확장 프로퍼티

확장 함수

기존 자바 API를 재작성하지 않고도 코틀린이 제공하는 편리한 기능을 사용할 수 있게 해준다

 

어떤 클래스의 멤버 메소드인 것처럼 호출 가능하다

확장 함수를 만들려면 함수 이름 앞에 확장할 클래스의 이름을 적어준다

수신 객체 타입은 확장이 정의될 클래스의 타입이며,

수신 객체는 그 클래스에 속한 인스턴스 객체이다

 

확장 함수 내부에서는 일반적인 인스턴스 메소드의 내부에서처럼

수신 객체의 메소드나 프로퍼티를 바로 사용할 수 있으며 캡슐화를 깨지는 않는다

 

그러나 클래스 안에서 정의한 메소드와 달리 private 나 protected를 사용할 수 없다

 

임포트와 확장 함수

 

확장 함수를 정의해도 모든 소스코드에서 사용은 불가능, 사용하기 위해서는 임포트가 필요하다

확장 함수의 이름 충돌을 해결하는 유일한 방법은 임포트 시 이름을 바꿔야 한다

하지만 확장 함수는 코틀린 문법상 반드시 짧은 이름을 써야 한다.

 

확장 함수로 유틸리티 함수 정의

joinToString()를 확장으로 정의하기

 

 

확장 함수는 오버라이드 할 수 없다

 

멤버 함수 오버라이드 하기

View 타입 변수에 대해 click과 같은 일반 메소드를 호출했는데,

click을 Button 클래스가 오버라이드 했다면 실제로는 Button이 오버라이드 한 click이 호출된다

 

확장 함수는 클래스의 일부가 아니고 클래스 밖에 선언된다

함수를 호출할 떄 수신 객체로 지정한 변수의 정적 타입에 의해 결정된다

(변수에 저장된 객체의 동적 타입에 의해 결정되지 않는다)

 

 

확장 함수는 클래스의 밖에 선언

 

*어떤 클래스를 확장한 함수와 그 클래스의 멤버 함수의 이름과 시그니처가 같다면

확장 함수가 아니라 멤버 함수가 호출된다(멤버함수의 순위가 더 높다)

 

 

확장 프로퍼티

 

확장 프로퍼티를 사용하면 API를 추가할 수 있다

확장 함수의 경우와 마찬가지로 확장 프로퍼티도 일반적인 프로퍼티와 같은데,

단지 수신 객체 클래스가 추가되었을 뿐이다

 

기본 게터 구현을 제공 불가능하여 최소한 게터는 꼭 정의해야 한다

마찬가지로 초기화코드에서 담을 장소가 없어 초기화 코드도 쓸 수 없다

'Today I learned > 용어정리' 카테고리의 다른 글

어댑터 뷰(Adapter View)  (0) 2024.04.11
뷰 바인딩?  (0) 2024.04.09
추상화  (0) 2024.03.22
인텐트 - (2)  (2) 2024.03.22
인텐트 - (1)  (0) 2024.03.21