Protocol 이용 : 익명의 객체를 위한 Interface를 선언하기

Protocol 이용 : 익명의 객체를 위한 Interface를 선언하기
  -> 뭔 소린가 했는데, 익명의 객체-클래스-를 만들 때 반드시 구현해야할 메소드를 선언 가능하다는 얘기인 듯.
자바의 interface로 보면 될 듯.

- 라이브러리나 framework 제작자는 클래스 이름이나 인터페이스 파일로는 알 수 없는 객체를 만들수 있다. 그런 이름이나 클래스 인터페이스가 없다면, 그런 것을 가져다 사용하는 사람들 입장에선 도무지 그런 클래스의 instance를 만들래야 만들수가 없겠다. 아니면 원제작자는 이미 만들어 놓은 instance를 제공해 주어야만 한다. 보통의 경우, 다른 클래스에 정의된 method는 사용할 수 있는 객체를 리턴해주게 끔 만든다.
   id formatter = [receiver formattingService];
이 예에 있는 객체, 즉 반환된 객체는 그 class identity가 없다. 아니면 적어도 그 원 제작자가 바깥에 공개하기를 꺼리는 것일 거다. 이런 객체를 쓰게 하려면, 적어도 몇몇개의 메시지에는 반응을 하도록 만들어야 한다. 그러므로 이런 것은 protocol로써 정의된 method들과 연결시켜 놓을 수 있다.
 -> id 타입으로 반환된, 공개하길 꺼리는 object를 protocol로 정의된 method와 연관시켜 놔서, 그 object를 사용할 수 있게 해야한다는 말인 듯.

- 각 프로그램들은 각자의 구조와, 클래스, 그리고 동작하는 논리가 있지만, 다른 프로그램이 어떻게 움직일지 여러분이 꼭 알아야 하는 것은 아니다. 그 프로그램의 바깥에 있는 사람 입장에선, 어떤 메시지를 보낼 수 있고, 어디다 보내야 할지를 알면 그만이다. 이것은 결국protocol과 receiver이 무엇이냐를 알기만하면 된다는 것이다.
다른 곳에서 오는 메시지를 받아 처리할 객체를 공개하는 프로그램은, 반드시 그 메시지에 반응할 method또한 공개해야 한다. 메시지를 보내는 측에선 해당 객체의 클래스가 뭐냐에 대해선 알 필요가 없고, 그 클래스를 내부적으로 이용할 필요도 없다. 단지 필요한 것은 protocol뿐이다.
  -> 맞는 말인데 protocol과의 관련성은 잘 모르겠다...ㅠ.ㅠ