Delegate 패턴이란?
Delegate 패턴은 한 객체가 다른 객체를 대신하여 특정 동작을 수행하도록 하는 디자인 패턴이다. 이는 객체 간의 결합도를 낮추고 코드 재사용성을 높이는 데 도움을 준다. 주로 다음과 같은 상황에서 사용된다.
- 이벤트 처리: 사용자의 액션에 따른 이벤트 처리를 위해 delegate를 사용한다.
- 데이터 전달: 한 객체가 다른 객체로부터 데이터를 받아오거나, 데이터를 전달할 때 사용된다.
- 커스텀화: 객체의 동작을 확장하거나 수정하기 위해 delegate를 이용한다.
Delegate 패턴의 구현 방법
Delegate 패턴을 구현하기 위해선 몇 가지 단계가 필요하다.
- 프로토콜 정의: Delegate가 구현해야 할 메소드나 프로퍼티에 대한 프로토콜을 정의한다.
- Delegate 프로퍼티 선언: Delegate 역할을 할 객체의 프로퍼티를 정의하고, 해당 프로토콜을 준수하도록 선언한다.
- Delegate 메소드 호출: Delegate를 통해 이벤트가 발생하면, Delegate 객체의 메소드를 호출하여 처리한다.
예제 코드로 알아보기
// 1. 프로토콜 정의
protocol SomeProcessDelegate: AnyObject {
func processDidComplete()
}
// 2. Delegate 프로퍼티 선언
class ProcessManager {
weak var delegate: SomeProcessDelegate?
func startProcess() {
print("프로세스 시작")
// 프로세스 완료 후 Delegate 메소드 호출
delegate?.processDidComplete()
}
}
// 3. Delegate 프로토콜 구현
class ViewController: UIViewController, SomeProcessDelegate {
let manager = ProcessManager()
override func viewDidLoad() {
super.viewDidLoad()
manager.delegate = self // Delegate 설정
manager.startProcess() // 프로세스 시작
}
// 프로토콜 메소드 구현
func processDidComplete() {
print("프로세스 완료 처리")
// 추가적인 작업 수행
}
}
위 코드에서는 ProcessManager 클래스에서 프로세스를 시작하고, 완료 후 SomeProcessDelegate 프로토콜을 준수하는 ViewController에서 처리를 한다. 이를 통해 두 객체 간의 강력한 연결을 허용하면서도 느슨한 결합을 유지할 수 있다.