익스텐션은 이미 존재하는 클래스, 구조체, 열거형이나 프로토콜 타입에 새로운 기능을 추가하는 것을 뜻합니다. 이는 본래 소스코드에 접근할 권한이 없어도 이를 확장시킬수 있습니다. 익스텐션은 Objective-C의 카테고리(categories)와 비슷합니다. (Objective-C의 카테고리와는 달리, Swift의 익스텐션은 이름이 없습니다.)
스위프트의 익스텐션은
- 계산 인스턴스 프로퍼티와 계산 타입 프로퍼티 추가
- 인스턴스 메소드와 타입 메소드 정의
- 새 이니셜라이저 제공
- 서브스크립트 정의
- 새로운 중첩타입 정의 및 사용
- 존재하는 타입을 프로토콜에 준수 시키기
와 같은 특징을 가지고 있습니다.
익스텐션은 타입에 새로운 기능을 추가할 수 있지만, 기존 기능에 오버라이드 할 수 없습니다.
익스텐션 문법
익스텐션을 정의하는 법은 extension 키워드를 사용:
또한, 익스텐션은 하나 또는 여러개의 프로토콜을 확장시킬 수 있습니다.
만약 기존의 타입에 새로운 기능을 추가하는 익스텐션을 정의한다면, 그 새로운 기능은 이 익스텐션이 정의되기전에 만들어졌다해도 존재하는 기존의 모든 타입에서 사용 가능해야만 합니다.
익스텐션에서의 연산 프로퍼티와 저장 프로퍼티
- 연산프로퍼티 사용 가능 (O)
- 저장 프로퍼티 사용 불가능 (X)
- 프로퍼티 옵저버 사용 불가능(X)
익스텐션의 이니셜라이저
인스턴스를 초기화(이니셜라이즈)할 때 다양한 이니셜라이저를 만들 수 있습니다.
이때, 클래스 타입에는
- 편의 이니셜라이저 추가 가능 ( O )
- 지정 이니셜라이저 추가 불가능( X )
익스텐션의 메서드
익스텐션에 기존타입의 인스턴스 메서드나 타입 메서드를 추가해 줄 수 있습니다.