3.3 확장 함수와 확장 프로퍼티
확장 함수
기존 자바 API를 재작성하지 않고도 코틀린이 제공하는 편리한 기능을 사용할 수 있게 해준다
어떤 클래스의 멤버 메소드인 것처럼 호출 가능하다
확장 함수를 만들려면 함수 이름 앞에 확장할 클래스의 이름을 적어준다
수신 객체 타입은 확장이 정의될 클래스의 타입이며,
수신 객체는 그 클래스에 속한 인스턴스 객체이다
확장 함수 내부에서는 일반적인 인스턴스 메소드의 내부에서처럼
수신 객체의 메소드나 프로퍼티를 바로 사용할 수 있으며 캡슐화를 깨지는 않는다
그러나 클래스 안에서 정의한 메소드와 달리 private 나 protected를 사용할 수 없다
임포트와 확장 함수
확장 함수를 정의해도 모든 소스코드에서 사용은 불가능, 사용하기 위해서는 임포트가 필요하다
확장 함수의 이름 충돌을 해결하는 유일한 방법은 임포트 시 이름을 바꿔야 한다
하지만 확장 함수는 코틀린 문법상 반드시 짧은 이름을 써야 한다.
확장 함수로 유틸리티 함수 정의
확장 함수는 오버라이드 할 수 없다
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 |