Post

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 TaskDelegateUIScrollViewDelegate
이벤트 발생 객체WorkerUIScrollView
delegate 변수var delegate: TaskDelegate?scrollView.delegate
이벤트 발생 메서드work()스크롤 움직임 이벤트 (scrollViewDidScroll)
delegate에게 이벤트 전달delegate?.doTask(result: result)scrollView.delegate?.scrollViewDidScroll(scrollView)
이벤트 처리 객체ManagerViewController
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.