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를 열람합니다.
4. Document에서 원하는 Delegate를 검색하여 정의된 메소드를 확인하고 코드에 이용합니다.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// 테이블 셀 중 선택된 셀의 번호를 출력하게 됨
print(indexPath.row)
}
델리게이트 패턴에 대해 적기 위해 가장 간단한 예시를 들었습니다. 이렇게 하는 방법 말고도 Extension으로 빼는 방법, 특정한 이름의 Protocol을 만들어서 받아서 사용하는 방법 등이 존재합니다.
'Swift > UIKit' 카테고리의 다른 글
[UIKit] viewDidLayoutSubviews란? (0) | 2023.03.18 |
---|---|
[UIKit] NavigationController에서 push 할때 버벅이는 문제 (0) | 2023.03.11 |
KeyChain의 SecItemAdd(_:_:) 에러 조회하기 (0) | 2023.02.10 |
[UIKit] 스토리보드로 Cell에 올린 Label이 좌측상단으로 정렬되지 않는 문제 (0) | 2022.08.08 |