Delegation Design Pattern
하나의 객체가 다른 객체를 대신해 동작 또는 조정할 수 있는 기능을 제공합니다.
- Delegation design pattern 은 Foundation, UIKit, AppKit 그리고 Cocoa Touch 등 애플의 프레임워크에서 광범위하게 활용하고 있습니다.
- 주로 프레임워크 객체가 위임을 요청하며, 커스텀 컨트롤러 객체가 위임을 받아 특정 이벤트에 대한 기능을 구현합니다.
- Delegation design pattern 은 커스텀 컨트롤러에서 세부 동작을 구현함으로써 동일한 동작에 대해 다양한 대응을 할 수 있게 해 줍니다.
UITextFieldDelegate (예)
// 대리자에게 특정 텍스트 필드의 문구를 편집해도 되는지 묻는 메서드
func textFieldShouldBeginEditing(UITextField)
// 대리자에게 특정 텍스트 필드의 문구가 편집되고 있음을 알리는 메서드
func textFieldDidBeginEditing(UITextField)
// 특정 텍스트 필드의 문구를 삭제하려고 할 때 대리자를 호출하는 메서드
func textFieldShouldClear(UITextField)
// 특정 텍스트 필드의 `Return` 키가 눌렸을 때 대리자를 호출하는 메서드
func textFieldShouldReturn(UITextField)
데이터소스 (DataSource)
- Delegate 와 매우 비슷한 역할을 하는 데이터소스가 있습니다.
- Delegate 가 사용자 인터페이스 제어에 관련된 권한을 위임받고, 데이터소스는 데이터를 제어하는 기능을 위임받습니다.
- 많이 사용되는 데이터소스에는 UITableViewDataSource 와 UICllectionViewDataSource 가 있습니다.
프로토콜 (Protocol)
- 코코아터치에서 프로토콜을 사용해 delegation 과 datasource 를 구현할 수 있습니다.
- 객체 간 소통을 위한 강력한 통신 규약으로 데이터나 메시지를 전달 할 때 사용합니다.
- 프로토콜은 특별한 상황에 대한 역할을 정의하고 제시하지만, 세부 기능은 미리 구현해두지 않습니다.
- 구조체, 클래스, 열거형에서 프로토콜을 채택하고 특정 기능을 수행하기 위한 요구사항을 구현할 수 있습니다.
Music Player 에서의 Delegate 활용
self.player.delegate = self
AVAudioPlayer 의 delegate 로 역할을 수행
delegate method를 볼 수 있는 방법
- quick help
- apple 공식 문서
- control + command + delegate 클릭 -> jump to definition (코드로 볼 수 있다.)
'iOS > STUDY' 카테고리의 다른 글
[iOS] UITextField 암호화 시 Strong Password (0) | 2021.03.08 |
---|---|
[iOS] UIDatePicker, UIGestureRecognizer (4) | 2021.03.06 |
[iOS] View transition (0) | 2021.02.05 |
[iOS] modal 생성하기 (storyboard) (0) | 2021.02.05 |
[iOS] Navigation Interface 구현하기 (0) | 2021.02.05 |