프로토콜 정의
프로토콜 정의
Objective-C에서 프로토콜(protocol)은 Object Pascal에서 인터페이스(interface)가 하는 역할을 담당해요. 다만 몇 가지 차이가 있어요.
본문
차이점부터 살펴볼게요.
- 프로토콜 메서드는 선택(optional)으로 표시할 수 있어요. 프로토콜을 구현하는 클래스는 그런 선택 메서드를 구현하지 않을 수도 있어요.
- 프로토콜은 여러 다른 프로토콜로부터 상속받을 수 있어요.
- Objective-C 클래스는 클래스 정의에서 자신이 어떤 프로토콜을 구현하는지 표시할 수 있어요. 이건 Objective-C 클래스의 문법 다이어그램에서 확인할 수 있었죠.
objcprotocol 키워드로 프로토콜을 선언하는 모습을 다이어그램으로 볼 수 있어요. Objective-Pascal 클래스의 경우처럼, external 지정자는 이 선언이 다른 곳에 정의된 프로토콜을 가져오는(import) 것임을 컴파일러에게 알려줘요. 메서드에는 Objective-Pascal 클래스 선언의 메서드와 거의 같은 규칙이 적용되는데, 예외는 message 지정자가 반드시 있어야 한다는 점이에요.
메서드 선언 무리 앞에 붙는 required와 optional 지정자는 선택 사항이에요. 아무것도 지정하지 않으면 required로 간주돼요. 다음은 프로토콜 정의의 예시예요.
type
MyProtocol = objccprotocol
// default is required
procedure aRequiredMethod;
message 'aRequiredMethod';
optional
procedure anOptionalMethodWithPara(para: longint);
message 'anOptionalMethodWithPara:';
procedure anotherOptionalMethod;
message 'anotherOptionalMethod';
required
function aSecondRequiredMethod: longint;
message 'aSecondRequiredMethod';
end;
MyClassImplementingProtocol = objcclass(NSObject,MyProtocol)
procedure aRequiredMethod;
procedure anOptionalMethodWithPara(para: longint);
function aSecondRequiredMethod: longint;
end;
클래스 선언에서는 message 지정자를 생략했는지 눈여겨보세요. 컴파일러(와 런타임)는 프로토콜 정의로부터 그것을 유추할 수 있어요.
더 알아보기
- 프로토콜이 Objective-C 클래스 문법에서 어떻게 쓰이는지는 클래스 선언 섹션에서 다뤄요.
- 카테고리를 통해 기존 클래스에 프로토콜 구현을 추가하는 방법도 살펴볼 수 있어요.