Delegate 패턴
Delegate 패턴
객체 간의 통신을 위한 디자인 패턴.
한 객체가 자신의 일부 기능을 다른 객체(Delegate)에게 위임하는 방식
⛳ 델리게이트 패턴 구조
- Protocol 정의
- Delegate 객체 생성 및 프로토콜 채택
- 위임자에게 실행 요청
1. Protocol 정의
1
2
3
protocol TaskDelgate {
func doTask(result: String)
}
2. Delegate 객체 생성 및 프로토콜 채택
1
2
3
4
5
6
7
8
class Worker {
var delegate: TaskDelegate?
func work() {
let result = "결과" //프로토콜에 정의한 함수로 넘길 값
delegate.doTask(result: result)
}
}
3. 위임자에게 실행 요청
1
2
3
4
5
class Manager: TaskDelegate {
func doTask(result: String) {
print(result)
}
}
4. 실행
1
2
3
let worker = Worker()
worker.delegate = Manager()
worker.work()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
protocol TaskDelegate { // UIScrollViewDelegate
func doTask(result: String)
}
class Worker { // UIScrollView
var delegate: TaskDelegate?
func work() { // scrollViewDidScroll
let result = "결과"
delegate?.doTask(result: result)
// scrollView.delegate?.scrollViewDidScroll(scrollView)
}
}
class Manager: TaskDelegate { // ViewController
let worker = Worker()
init() {
worker.delegate = self //scrollView.delegate = self
}
func doTask(result: String) {// func scrollViewDidScroll(_:)
print("Manager가 받은 값: \(result)") // ✅ Delegate 메서드 구현
}
}
// ✅ 사용 예
let manager = Manager() // ✅ Manager 생성 (자동으로 delegate 연결됨)
manager.worker.work() // UIScrollView가 스크롤되었을 때
역할 | 코드 내 항목 | 뷰 컨트롤러 대응 항목 |
---|---|---|
Delegate 프로토콜 | protocol TaskDelegate | UIScrollViewDelegate |
이벤트 발생 객체 | Worker | UIScrollView |
delegate 변수 | var delegate: TaskDelegate? | scrollView.delegate |
이벤트 발생 메서드 | work() | 스크롤 움직임 이벤트 (scrollViewDidScroll ) |
delegate에게 이벤트 전달 | delegate?.doTask(result: result) | scrollView.delegate?.scrollViewDidScroll(scrollView) |
이벤트 처리 객체 | Manager | ViewController |
Delegate 메서드 구현 | func doTask(result:) | func scrollViewDidScroll(_:) |
delegate 연결 | worker.delegate = Manager() | scrollView.delegate = self |
이벤트 발생 | worker.work() | UIScrollView가 스크롤되었을 때 |
This post is licensed under CC BY 4.0 by the author.