델리게이트 패턴은 서로 다른 객체가 통신하기 위해 만들어진 패턴입니다.
A 객체에서 일어난 결과값을 B 객체에게 떠넘겨 대신 처리하게 하는 것.
이것이 델리게이트 패턴입니다.
간단한 예시를 들어보겠습니다.
TextField가 존재하고 ViewController가 존재합니다.
사용자의 이벤트가 TextField에게 들어오면 TextField는 그것을 ViewController에게 위임하여 대신 처리하게 넘기는 것입니다.
델리게이트 패턴의 처리과정은 다음과 같습니다.
1) 프로토콜을 정의합니다.
2) A 객체가 프로토콜을 채택한 후, 프로토콜 내의 프로퍼티와 메소드를 구현합니다.
3) B 객체는 프로토콜을 타입으로 가지는 delegate 변수를 하나 선언합니다. (프로토콜을 타입으로 가지는 변수를 통해 프로토콜 내의 메소드나 프로퍼티에 접근할 수 있게 됩니다.)
4) 프로토콜을 채택한 A 객체는 B 객체의 delegate 변수를 통해 받을 메소드를 대신 처리할 대리자를 A, 자신으로 설정합니다. (b.delegate = self)
이렇게 되면 A 객체의 인스턴스가 B 객체의 변수 delegate에 할당되게 됩니다.
5) B 객체가 delegate 변수를 이용해 프로토콜 내부에 있는 메소드를 실행합니다. (프로토콜을 타입으로 가지는 delegate 변수를 통해 프로토콜의 메소드에 접근)
그런데 delegate 변수에 A 객체의 인스턴스가 들어와있으므로 사실 메소드의 결과값을 A 객체에서 처리하게 되는 것입니다.
6) 즉, B 객체의 메소드가 실행되면 그것을 A 객체로 넘겨 대신 처리하게 되는 것입니다.