안녕하세요 :)
iOS 개발자 리치(rich_iosdev)입니다.
공유해드릴 내용은 Delegation입니다.
Delegation Design Pattern
- 클래스나 구조체에서 하는 일부분의 수행 작업을 다른 객체에게 대신하도록 하는 디자인 패턴
- View가 받은 이벤트 상태를 ViewController에게 전달해주기 위해 사용
- ViewController를 통해 View 구성에 필요한 데이터를 받는 용도로 사용
Delegate Pattern 샘플 코드
선언부
class CustomView: UIView {
// 2. 클래스에 delegate 프로퍼티 생성
var delegate:CustomViewDelegate?
override func layoutSubviews() {
// 3. delegate 인스턴스의 메소드 실행
delegate?.viewFrameChanged(newFrame: self .frame) }
}
// 1. 프로토콜 생성
protocol CustomViewDelegate {
func viewFrameChanged(newFrame:CGRect) }
구현부
// 1. CustomView Delegate 채택
class ViewController: UIViewController, CustomViewDelegate{
override func viewDidLoad() {
super . viewDidLoad ()
// 3. custom instance의 delegate 프로퍼티에 자기자신의 인스턴스를 할당
(프로토콜 추상화 타입)
let custom = CustomView()
custom.delegate = self
}
// 2. 채택한 Delegate 메소드 구현
func viewFrameChanged(newFrame: CGRect){
// 뷰의 프레임이 변경될때마다 불림
}
}
Custom한 Delegate를 직접 만들어서 구현을 해봤습니다.
위 샘플 코드처럼 Delegate Pattern은 선언부와 구현부로 나뉩니다.
[선언부]
1. 프로토콜 (Delegate)을 생성
2. 처리하라고 시키는 객체에 프로토콜 (Delegate) 프로퍼티 생성
3. 프로토콜 (Delegate) 인스턴스의 메서드를 실행
[구현부]
1. ViewController에서 프로토콜(Delegate) 채택
2. 채택한 프로토콜(Delegate) 메서드를 구현
3. delegate 인스턴스에 대신 처리해줄 객체 (self: ViewController)를 할당 즉 대리자를 지정.
위와 같이 정리해봤습니다.
UITextFieldDelegate, UITableViewDataSource 그리고 UICollectionViewDataSource 프로토콜을 채택해서 많이 활용을 하고 있는 디자인 패턴입니다.
- 처리하라고 시키는 객체 (주로 이벤트를 받는 뷰들)
- 대신 처리해줄 객체 (ViewController)
라는 마기님의 블로그 내용이 가장 이해하기 쉬웠던 것 같아서 참고하였습니다.
잘못된 내용이 있다면 댓글로 남겨주세요!
확인해서 수정하도록 하겠습니다
끝까지 읽어주셔서 정말 감사합니다
References
rich_iosdev의 github
Delegate Pattern
https://github.com/richoh86/OhWonSeok_iOS_School6/blob/master/Class/DelegatePattern.md
마기님의 블로그
iOS Delegate 패턴에 대해서 알아보기
https://magi82.github.io/ios-delegate/
[부스트코스] iOS 프로그래밍
Delegation?
'Codes Travel > iOS Boost Course #2019' 카테고리의 다른 글
Target-Action 디자인 패턴 (0) | 2019.07.24 |
---|---|
Singleton (싱글턴) 이란? (0) | 2019.07.24 |
UIViewController 뷰의 상태변화 감지 메서드 (0) | 2019.07.23 |
Modal 화면전환 기법 (Present & Dismiss) (0) | 2019.07.22 |
UINavigationController ? (0) | 2019.07.21 |