Swift | Delegate (Tableview)

일어나 개발해야지·2023년 8월 8일

Swift

목록 보기
17/21

Delegate

대리자, 위임자라는 의미로
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
    }
}

Delegate 사용 장점

첫번째로는 모듈성과 두번째는 재사용성을 꼽을 수 있다.

  1. 모듈성 : 구성요소간의 책임을 분리해서, 역할을 구분할수 있고 유지보수가 수월해짐
  2. 재사용성 : 델리게이트 프로토콜의 방식으로 재사용이 가능합니다.(상속이나 양방향 통신으로는 다른 개념)

과제

델리게이트 프로토콜의 방식에 대해서 알아보기 ...!

0개의 댓글