1. Extension Function(확장 함수) 개념
- 개념적으로 확장 함수는 어떤 클래스의 멤버 메서드인 것처럼 호출할 수 있지만 밖에 선언된 함수를 의미합니다.
- 코틀린은 클래스를 상속하거나 데코레이터와 같은 디자인 패턴을 사용하지 않고도 클래스나 인터페이스에 새로운 기능을 확장할 수 있는 강력한 기능을 제공합니다.
- 이 기능은 '확장(extensions)'이라고 불리는 특별한 선언을 통해 이루어집니다.
- 확장 함수를 사용하면 수정할 수 없는 서드파티 라이브러리의 클래스나 인터페이스에도 새로운 함수를 추가할 수 있습니다.
- 이러한 함수들은 마치 원래 클래스의 메서드인 것처럼 일반적인 방식으로 호출됩니다.
- 확장 함수는 코틀린 표준 라이브러리의 핵심적인 부분으로,
String,List,Collection등 많은 클래스에 풍부한 기능을 제공합니다.
노트
코틀린 확장 함수는 실제로 클래스를 수정하지 않습니다. 대신 해당 타입의 객체에 대해 호출할 수 있는 새로운 함수를 만듭니다. 이는 Open-Closed Principle(개방-폐쇄 원칙)을 자연스럽게 지원하는 방식입니다.
1.1 확장 함수의 장점
- 코드의 간결성: 기존 클래스에 유틸리티 메서드를 추가하여 코드를 더 읽기 쉽고 간결하게 만듭니다.
- 기존 코드 수정 없음: 원본 클래스의 코드를 수정하지 않고도 새로운 기능을 추가할 수 있습니다.
- API 확장: 라이브러리나 프레임워크 API를 확장하여 특정 도메인이나 프로젝트에 맞게 맞춤화할 수 있습니다.
- 명확한 네임스페이스: 함수는 특정 타입에 연결되어 있어 글로벌 유틸리티 함수보다 발견하기 쉽습니다.
- 명시적인 수신 객체: 코드의 가독성과 명확성을 높입니다.