Swift/UIKit

Delegate 패턴이란?

devKen 2022. 11. 7. 21:52

delegate는 대표, 위임자를 뜻하는 단어입니다.

델리게이트 패턴이란 하나의 객체가 모든 해야 할 일을 모두 정의하고 처리하는 것이 아니라 특정 행동에 대해서는 그것만을 전담하는 객체에게 일을 넘기는 것을 말합니다. 생산성 향상을 위해서 도입하는 패턴이라고 보시면 될 듯합니다. 상속만큼 강력한 재사용성을 보여주기도 하는 패턴으로 GUI 환경에서 많이 쓰입니다. 대표적으로 이벤트 리스너(Event Listener)에서 사용되고 있고 이미 우리는 이 패턴에 따라 생성된 함수들(onClick() 같은)을 호출해서 코드를 작성하고 있습니다. iOS 개발(UIKit)에서도 예외가 아닙니다.

그래서 어떻게 사용할까요?

1. 원하는 객체의 뒤에 Delegate를 붙여 프로토콜을 선언합니다. 때로는 이 단계에서 무조건 선언해야 하는 메소드들이 있어서 Xcode에서 경고를 출력하고 버튼을 눌러 자동으로 삽입시켜주기도 합니다.

// 프로토콜 선언
class ExampleViewController: UIViewController, UITableViewDelegate {

}

 

2. 화면을 구성하는 메소드에 델리게이트 속성으로 self를 넣어줍니다.

// 하나의 예시로 viewDidLoad를 사용합니다.
override func viewDidLoad() {
	// 델리게이트를 self로 지정합니다. 이 글에서는 코드를 하나의 파일 안에 다 작성한다는 가정하에 이렇게 합니다.
	self.tf.delegate = self
}

 

3. cmd + shift + 0을 눌러 Document를 열람합니다.

UITableViewDelegate 문서에 소개되어 있는 메소드들

 

4. Document에서 원하는 Delegate를 검색하여 정의된 메소드를 확인하고 코드에 이용합니다.

didSelectRowAt이라는 메소드 기능을 설명함

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
	// 테이블 셀 중 선택된 셀의 번호를 출력하게 됨
    print(indexPath.row)
}

 

델리게이트 패턴에 대해 적기 위해 가장 간단한 예시를 들었습니다. 이렇게 하는 방법 말고도 Extension으로 빼는 방법, 특정한 이름의 Protocol을 만들어서 받아서 사용하는 방법 등이 존재합니다.