CHAPTER 21 익스텐션
__21.1 익스텐션이란
익스텐션은 스위프트의 강력한 기능 중 하나로 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가
기능을 추가하려는 타입을 구현한 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 안다면 그 타입의 기능을 확장할 수도 있습니다.
스위프트의 익스텐션은 이름이 없습니다.
스위프트의 익스텐션이 타입에 추가할 수 있는 기능
연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
타입 메서드 / 인스턴스 메서드
이니셜라이저
서브스크립트
중첩 타입
특정 프로토콜을 준수할 수 있도록 기능 추가
익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없습니다.
상속과 익스텐션 비교
상속
확장
수직 확장
사용
클래스 타입에서만 사용
재정의
재정의 가능
익스텐션
확장
수평 확장
사용
클래스, 구조체, 프로토콜, 제너릭 등 모든 타입에서 사용
재정의
재정의 불가
외부에서 가져온 타입에 내가 원하는 기능을 추가하고자 할 때 익스텐션을 사용
모든 타입에 적용
모든 타입에 연산 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 데이터 타입 등을 추가할 수 있습니다.
extension확장할 타입 이름 {
// 타입에 추가될 새로운 기능 구현
}
기존에 존재하는 타입이 추가로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있습니다.
__21.3 익스텐션으로 추가할 수 있는 기능
21.3.1 연산 프로퍼티
익스텐션으로 연산 프로퍼티를 추가할 수는 있지만, 저장 프로퍼티는 추가할 수 없습니다.
타입에 정의되어 있는 기존의 프로퍼티에 프로퍼티 감시자를 추가할 수도 없습니다.
21.3.2 메서드
21.3.3 이니셜라이저
익스텐션으로 클래스 타입에 편의 이니셜라이저는 추가할 수 있지만, 지정 이니셜라이저는 추가할 수 없습니다.
지정 이니셜라이저와 디이니셜라이저는 반드시 클래스 타입의 구현부에 위치해야 합니다. (값 타입은 상관없습니다.)
익스텐션으로 값 타입(열거형, 구조체 등)에 이니셜라이저를 추가했을 때, 해당 값 타입이 다음 조건을 모두 성립한다면 익스텐션으로 사용자정의 이니셜라이저를 추가한 이후에도 해당 타입의 기본 이니셜라이저와 멤버와이즈 이니셜라이저를 호출할 수 있습니다.
모든 저장 프로퍼티에 기본값이 있습니다.
타입에 기본 이니셜라이저와 멤버와이즈 이니셜라이저 외에 추가 사용자정의 이니셜라이저가 없습니다.
익스텐션을 통해 추가하는 이니셜라이저는 이니셜라이저 호출이 종료되는 시점까지 인스턴스가 정상적으로 완벽하게 초기화되는 것을 책임져야 합니다.
21.3.4 서브스크립트
21.3.5 중첩 데이터 타입
참고
야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019
댓글