일반적으로 Custom Type(클래스, 구조체, 열겨형)이 프로토콜을 채택하면, 해당 프로토콜의 모든 기능을 구현해야 합니다.
@objc 어트리뷰트 키워드와 optional 키워드를 사용하면 프로토콜의 요구사항을 선택적으로 구현할 수 있습니다.
하지만 해당 방법은 클래스만 프로토콜의 기능을 부분적으로 선택할 수 있습니다. ("Objective-C" 문법에서 프로토콜은 클래스만 채택할 수 있습니다. / 구조체, 열거형은 불가능)
✅ 프로토콜의 선택적 기능 구현
- 코드 앞에
@objc
어트리뷰트(Attributes)를 작성할 경우, Swift 코드가 Objective-C 코드에 접근이 가능해집니다.
- 프로토콜의 멤버 앞에는
@objc optional
을 작성해야 합니다.import Foundation @objc protocol ABCD { @objc optional func a() func b() @objc optional func c() func d() } class XXX: ABCD{ func b() { // 필수 정의 print("b") } func d() { // 필수 정의 print("d") } func a(){ print("a") // 선택적 정의 } }