delegate = self는 어떤 의미를 가질까?
먼저 '프로토콜'을 채택하기 위해 우리는 프로토콜에서 지정한 함수 또는 직접 만든 함수를 활용해야한다.
다만 델리게이트의 경우, 일반적인 프로토콜과 달리 채택한 이후에 delegate = self를 활용해야 하는 것 같다.
앞서 이 글에서 delegate는 특정 코드의 대리자를 수행하는 역할을 한다 찾아보았다. delegate = self를 하는 이유는 A의 UI Component 책임을 나, B가 받겠다로 이해하면 된다.
예를 들면, UITableViewController는 테이블 뷰를 구성하기 위한 모든 메서드와 속성들을 가지고 있다. UITabelViewController의 하위 클래스라면, 이미 모든 값을 가지고 있을 것이다. 따라서 별도의 delegate 없이 자유롭게 사용이 가능하다.
하지만, UIViewController가 UITableViewController의 기능을 활용하고자 한다면 어떻게 될까?
상속 범위를 벗어난 다른 클래스이기에 기능에 대한 책임이 없다. 이 때 protocol로 UITableViewDelegate와 UITableViewDataSource를 채택시킨다면 UITableViewController이 가지고 있는 책임을 모두 위임한다는 의미를 가진다.
따라서 책임을 받는 클래스의 파일 속에서 delegate 위임을 아래와 같이 self로 지정하는 것이다. [링크]
tableView.delegate = self
tableView.dataSource = self
delegate는 하나만 가능한건가?
지금까지 찾아보기로는 single contract만 가능한 것으로 보여진다. [링크]
What is boilerplate code?
What kind of tableView types are there?
what's the difference between TableViewCell and TableView?
reuseIdentifier은 무엇인가
indexPath.row는?
DataSource는 어떤 정보를 관리하는가
UICollectionViewFlowLayout은 무엇인가
NSLayoutConstraint or topAnchor.constraint....?
Why use .zero when creating frame?