클래스를 구현할 때, 특정 프로토콜을 구현하도록 선언하지 않아도 그 프로토콜을 구현해 버릴 수 있기 때문
오브젝티브-C 2.0 이전 버전들에서는 클래스는 그 자신 스스로 채택하여 선언하고 있는 프로토콜 안에 들어 있는 모든 메소드를 구현해야 한다고 요구하고 있다; 반면에 컴파일러는 만약 그 클래스에서 선언된 프로토콜이 가지고 있는 모든 메소드가 구현되지 않았다면 에러를 생략할 것이다. 오브젝티브-C 2.0은 프로토콜 안에 있는 특정 메소드가 선택적(optional)이라고 표시하기 위한 지원을 추가했으며, 컴파일러는 선택적(optional) 메소드들을 강제로 구현하지 않을 것이다. 오브젝티브-C이 가지고 있는 프로토콜(protocols) 개념은 자바나 C#(C 샤프)의 인터페이스와는 좀 다르다. 왜냐하면 클래스를 구현할 때, 특정 프로토콜을 구현하도록 선언하지 않아도 그 프로토콜을 구현해 버릴 수 있기 때문이다. 그 차이는 외부 코드에서는 알아챌 수 없다. 공식 프로토콜은 어떤 구현도 제공할 수 없으며, 단순히 특정한 프로토콜을 만족하는 클래스는 해당 프로토콜에 속한 모든 메소드를 구현해야 한다는 것을 강제하기 위해 쓰인다. 넥스트/애플 라이브러리에서, 프로토콜은 분산 객체 시스템(Distributed Objects system)에서 어떤 원격 시스템에서 일하는 객체의 능력을 표현하기 위하여 자주 사용된다.
오브젝티브 C의 프로토콜 개념이 인터페이스와 다른 이유는
오브젝티브-C