콘텐츠로 건너뛰기
Home » formal protocol

formal protocol

[Objective-C] 프로토콜

클래스는 서로 다르지만 A라는 똑같은 메소드를 하나씩 가지고 있는 어떤 객체들이 있다고 하자. 방금 A라는 메소드를 가지고 있다고 가정했기 때문에 이 객체들에게는 A라는 메시지를 보냈을 때 해당 메소드가 실행될 것이라는 게 보장된다. 프로토콜은 이처럼 특정한 메소드를 구현해서 갖추고 있겠다는 약속을 말한다.

어떤 객체가 특정한 프로토콜을 따르고 있다면, 그 프로토콜에서 선언된 메소드는 구현하고 있다는 의미이며, 해당 메소드를 호출할 수 있다. 이 때 객체의 클래스가 무엇인지는 관심의 대상이 아니다.

프로토콜은 Objective-C의 기능으로 “선언만 되고 구현되지 않은” 메소드를 말한다. 이 기능은 흔히 ‘다중 상속을 지원하지 못하는 Objective-C의 기능을 보완하기 위해’ 만들어졌다고 하는데, 틀려먹은 이야기이고… Swift에서는 특히 중요하고 광범위하게 사용되기 때문에 주목을 많이 받는데, Objective-C에서는 그렇게 중요하게 다뤄지지 않았던 거 같아서 (아니, 다루는 블로그가 별로 없었지) 정리하도록 하겠다.

어떤 객체의 클래스에 대해서 알고 있다면, 이 클래스가 제공하는 인터페이스를 통해서 우리는 객체가 지원하는 기능들을 사용할 수 있게 된다. 거꾸로 어떤 특정한 기능이 필요하다면 우리는 그러한 기능을 지원하는 클래스를 선택해서 사용해야 한다. 그런데 특정한 기능은 정해져 있지만, 어떤 클래스를 사용하게 될지 알 수 없다면 어떻게 할까?

더 보기 »[Objective-C] 프로토콜