Kotlin

Deep Dive into Kotlin_1. Extension

지 슈 2022. 10. 8. 17:36

코틀린의 확장(Extension) 지원에 대해 알아보았다.

Extension이란

-상속이나 디자인 패턴 없이 클래스를 간단하게 확장할 수 있는 방법이다.

자바는 확장 기능 대신, AOP 같은 관점 지향 프레임워크를 사용한다. 하지만 코틀린은 open키워드를 달아주지 않으면 상속을 받지 못해서 확장 기능을 지원한다.

 

코틀린의 확장 함수

클래스로 대변되는 타입에 함수를 상속관계 없이 추가하는 것이다.

함수를 마치 이 타입의 멤버 함수인 것처럼 호출 가능하다. 

단, 호출이 가능한 함수들은 패키지의 멤버 함수이다.

확장 함수는 새로운 클래스를 만들지 않아도 되어서 간편하게 사용 가능하다.

 

확장 함수를 선언하는 방법: 클래스 이름 .(온점) 함수 이름

 

확장 함수는 클래스 안에 들어가지 않는다.

실제로 메소드를 클래스 안에 만드는 것이 아니라 마치 이 클래스의 멤버 함수인 것처럼 클래스 밖에서 선언하는 것이다.

*그래서, 확장 함수는 수신되는 클래스가 public 일 때만 사용 가능하다.

 

코틀린의 확장 프로퍼티

프로퍼티, 즉 멤버 변수도 확장 가능하다.

프로퍼티는 getter/setter를 제공하기 때문에 초기화와 같은 기능을 사용할 수 있다.

 

 

Q1. 확장 함수는 오버라이딩 가능하다. (x)

확장 함수는 오버라이딩 불가능하다. 앞서 설명됐듯이 확장 함수는 클래스 밖에서 선언되기 때문이다.

 

Q2. 확장 함수는 오버로드 가능하다. (0)

확장 함수는 클래스의 메소드와 확장 함수의 이름이 같더라도 매개 변수 타입이 다르면 오버로드 가능하다.