🍃 출처 : 앨런 swift 문법 마스터 스쿨 수업을 듣고 제가 이해한대로 정리해서 올리는 포스팅입니다.
class SomeType { // 본체 } extension SomeType { // 확장한 타입 }
- 기존 클래스, 구조체, 열거형 타입에 새로운 속성, 메서드, 생성자 등을 추가하는 것
- 원본타입(소스 코드)에 접근하지 못하는 타입들도 확장해서 사용할 수 있다
- ⭐️ 장점: 원본 소스 코드에 대한 액세스 권한이 없는 유형을 확장하는 기능 포함
(소급-모델링)
- 수직확장 (클래스만)
: 본질적으로 성격이 비슷한 타입을 새로 만들어
1) 데이터(저장속성)을 추가하거나
2) 기능(메서드) 변형시켜 사용
- 수평확장
- 현재 존재하는 타입에 기능(메서드) 추가하여 사용
✔️ 메서드 종류만 추가 가능, 추가 메모리 공간이 필요한 저장속성을 확장하는 것은 불가
- 클래스 / 구조체 / 열거형
- 확장되기 전에 생성된 경우에도 기존 인스턴스에서 새 기능 사용가능
extension SomeType { // 새로운 기능을 추가 }
✏️ 확장 가능 멤버의 종류 (메서드 형태만 가능)
1) (타입) 계산속성, (인스턴스) 계산속성
- 속성 감시자 추가 안되는 이유 : 저장 속성 관찰하기 때문
2) (타입) 메서드, (인스턴스) 메서드
3) ⭐️ 새로운 생성자
- 다만, 클래스의 경우 편의 생성자만 추가가능 (구조체는 다ㅇㅋ)
- 저장 속성은 확장을 할 수 없다
4) 서브스크립트
5) 새로운 중첩타입 정의 및 사용
6) 프로토콜 채택 및 프로토콜 관련 메서드
ㅡ
✏️ (확장에서) 새로운 생성자 구현 가능
extension Sometype {
,,,
convenience init(...) {
self.init(...)
}
...
}
ㅡ
✏️ (확장에서) 프로토콜 채택 문법
extension SomeType: SomeProtocol {
// 프로토콜이 원하는 내용 구현
}