프로토콜은 다중 상속, 다형성, stuct 과 enum 에도 사용 가능하다
프로토콜 기본 개념은
[Swift] 프로토콜 총정리
스위프트 프로토콜의 특징
- 여러 클래스의 기능을 합치고 싶을 때 어떻게 해야할까?
- 스위프트는 클래스의 다중상속을 지원하지 않는다.
- 프로토콜은 다중상속을 지원한다
- 블록 쌓기 🧱 와 같다.
- 모듈화가 용이해진다.
- 또한 struct, enum 도 프로토콜을 채택할 수 있다.
- 스위프트는 다형성을 지원하므로, 추상화할 때 프로토콜을 사용한다.
상속과 채택 비교하기 🕵🏻♂️
- 클래스의 상속
- base class 를 통한 수직적 확장
- 특정 기능을 위해 필요없는 기능도 같이 상속해야한다.
override
를 놓치면 원하지 않는 동작을 하게 된다.
- 프로토콜의 채택
- base class 가 없는 수평적 확장
- 블록 쌓기
프로토콜은 기본 구현을 제공한다
프로토콜을 채택한 타입에게 기본적으로 구현을 제공할 수 있다.
아래 코드는 Bird
라는 프로토콜을 채택한 타입에게 canFly
라는 속성의 기본 구현을 제공한다.
- 참고: 프로토콜 요구사항에 포함되지 않았더라도 아래와 같이 추가해 줄 수 있다.
- 이 경우 메서드라면
static dispatch
가 일어나는 것으로 알고 있다.
extension Bird {
var canFly: Bool { self is Flyable }
}
물론 채택한 타입은 기본 구현을 오버라이딩 할 수 있다.