대리자, 위임자라는 의미로
A 인스턴스가 하나의 일에만 충실하고 싶을 때,
그 밖의 일들을 B 인스턴스가 대신해서 처리해준다는 것이다.
* 구체적으로는 한 객체가 다른 객체의 동작을 컨트롤하거나 사용자 정의할 수 있도록 해주는 디자인 패턴으로,
특정 이벤트나 동작을 처리하기 위해 구현할 수 있는 메서드의 집합을 정의하는 프로토콜이다.
아래 코드에서 A인스턴스는 TodoListPage의 class이며,
B인스턴스는 해당 class의 extension이다.
A인스턴스 - UIViewController를 구성하고, TableVeiw에 대한 동작은 B인스턴스(extension)에 할당하고 있습니다.
B인스턴스 - extension에서는 이 작업을 위임 받음으로 TableView에 대한 동작을 제어하고 데이터를 표기하고 있습니다. TableVeiw의 동작을 주도하고 데이터를 조작할수 있게됩니다.
import UIKit
class TodoListPage: UIViewController {
@IBOutlet weak var tableView: UITableViewCell!
override func viewDidLoad() {
super.viewDidLoad()
// 델리게이트 할당
tableView.delegate = self
tableView.dataSource = self
}
}
extension TodoListPage: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// 실제 데이터 내의 행 수를 반환합니다.
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier", for: indexPath)
// 데이터로 셀을 구성합니다.
cell.textLabel?.text = "Row \(indexPath.row)"
return cell
}
}
첫번째로는 모듈성과 두번째는 재사용성을 꼽을 수 있다.
델리게이트 프로토콜의 방식에 대해서 알아보기 ...!