swift문법

[Swift] Part14_확장(Extensions)

화찌님 2022. 8. 23. 23:00

1. 확장의 개념과 메모리 구조

상속 = 수직확장 ( 성격이 비슷한 타입을 새로 만들어 저장속성을 추가하거나 메서드를 변형시켜서 사용)

확장 = 수평확장 ( 현재 존재하는 타입에 메서드를 추가하여 사용 >> 메서드 형태만. 추가가능)

기존기능에 새 기능을 추가하기 위해 확장을 정의하면 확장이 정의되기 전에 생성된 경우에도 기존 인스턴스에서 새 기능 사용이 가능함

 

확장(extension)은 원칙적으로 재정의 불가능하지만, @objc붙이면 재정의가 가능하다.

확장의 장점 ) Int같은건 애플이 만든 구조체인데 내가 건들이진 못해도 확장을 통해서 본인 마음데로 사용가능 (소급모델링)

즉, 원본소스에 대한 엑세스 권한이 없는 유형을 확장하는 기능이 포함되어 있다.

 


2. 확장가능 멤버 (속성과 메서드)

<확장가능멤버종류>

1) (타입)계산속성, (인스턴스) 계산속성

2) (타입)메서드, (인스턴스)메서드

3) 새로운생성자( 다만 클래스의 경우 편의생성자만 추가가능) >> 구조체는 편의생성자처럼 사용하려는애나 지정생성자 둘다 사용가능

4)서브스크립트

5) 새로운 중첩타입 정의 및 사용

6) 프로토콜 채택 및 프로토콜 관련 메서드

 

클래스/ 구조체/ 열거형 타입에 확장이 가능

새로운 메서드를 추가할 수 있지만, 상속처럼 본체에 대한 재정의는 불가 >> 재정의는 확장이 아닌 상속

 

<타입의확장 생성자의 경우 주의>

extention Sometype {
	...
    convenience init(...) { //확장에서 새로운 생성자 구현가능
    	self.init(...)
    }
    ...
}

새로운 생성자를 구현해도 됨

본체의 지정생성자 호출

1) 클래스 = 편의생성자만 구현가능 (본래의 지정생성자를 호출하는 방법으로만 구현가능)

2) 구조체 = 지정생성자의 형태로도 자유롭게 생성자 구현가능

(구조체참고: 모든 저장속성에 기본값 + 본체엥서 생성자 구현하지 않은 경우,

본체에서기본생성자/ 멤버와이즈 생성자가 제공됨

직접생성자 구현시 >> 제공 안되는것이 원칙이지만, 확장에서의 구현은 괜찮음 따라서 기본생성자/ 멤버와이즈 생성자 지속 제공되며, 확장에서도 호출도 가능하다.)

 

관습적으로 프로토콜의 채택은 확장에서 구현하는것을 권장한다 >> 이유는 프로토콜단원에 나온다.


이 포스팅은 인프런 앨런의 스위프트문법강의를 참고하여 작성하였습니다.

'swift문법' 카테고리의 다른 글

[Swift] Part16_메서드 디스패치  (0) 2022.08.25
[Swift] Part15_프로토콜  (0) 2022.08.24
[Swift] Part13_타입캐스팅(Type Casting)  (0) 2022.08.23
[Swift] Part12_클래스(상속과 초기화)  (0) 2022.08.23
참고) 싱글톤패턴  (2) 2022.08.23