나를 이용해라 패턴
Delegation 패턴은 어떤 객체에게 남의 도움을 받아도 되도록 만드는 패턴입니다.
그림을 먼저 보겠습니다.
먼저 Dependency 관계와 Implement 관계가 보입니다.
Object Needing a Delegate와 Delegate Protocol 이 Dependency 관계입니다.
Object Needing a Delegate는 Delegate가 필요한 객체이므로 Delegate Protocol을 소유합니다.
단, weak property로 delegate protocol을 소유함으로써 참조를 하지 않기 때문에 Association 관계가 아닌 Dependency 관계를 갖습니다.
Delegate Protocol에는 Object Needing a Delegate 객체가 필요한 부분을 정의합니다. 그리고 Implement 관계인 Object Acting as a Delegate 객체는 Delegate Protocol을 구현합니다.
이렇게 Object Needing a Delegate는 delegate protocol을 사용함으로써 구체적인 무언가에게 의존하지 않게 됩니다. 즉, 좀 더 유연 해지는 것이죠.
iOS에서는 대표적으로 UITableView, UICollectionView에서 Delegate 패턴을 사용합니다.
아래 코드를 보겠습니다.
UITableView는 애플에서 리스트를 보여주기 위해 만들어놓은 View 객체입니다. 하지만 List를 몇 개를 보여줄지 어떻게 보여줄지 결정하는 것은 개발자가 합니다. 모든 앱은 다 다르게 생겼기 때문이죠.
이런 정보를 담고 있는 protocol이 UITableViewDataSource입니다.
그리고 여기서 Object Needing a Delegate 객체는 UITableView가 됩니다.
Object Needing a Delegate는 Delegate Protocol과 Dependency 관계를 갖는다고 했습니다.
그렇기 때문에 UITableView에는 dataSource가 weak property로 구현되어있습니다.
그리고 우리는 Object Acting as a Delegate를 ViewController로 정하고 DataSource를 정의하며 UITableView에게 나를 이용하라 말하는 것이죠. (tableView.dataSource = self)
실제 현업에서도 Delegation Pattern은 다양하게 사용됩니다. 원리를 이해하고 사용하면 좋을 것 같습니다.
읽어주셔서 고맙습니다.
Raywenderlich의 Design Patterns by Tutorials를 참고했습니다.
https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0