위임(Delegation) 디자인 패턴은 객체가 작업을 다른 객체에게 위임하고, 그 결과를 받아 처리하는 패턴입니다. 이 패턴은 특히 프로토콜을 사용하여 구현할 수 있으며, 클래스 간의 의존성을 줄이고 코드를 유연하게 만드는 데 도움이 됩니다. Swift에서 간단한 예제를 통해 위임 패턴을 살펴보겠습니다:
// 위임을 위한 프로토콜 정의
protocol TaskDelegate: AnyObject {
func didFinishTask(_ sender: TaskManager, result: String)
}
class TaskManager {
weak var delegate: TaskDelegate?
func performTask() {
// Task 수행 (예시를 위해 문자열을 반환한다고 가정)
let result = "Task result"
// Task 완료 후 위임 객체에게 알림
delegate?.didFinishTask(self, result: result)
}
}
class ViewController: TaskDelegate {
let taskManager = TaskManager()
init() {
taskManager.delegate = self
taskManager.performTask()
}
// TaskDelegate 프로토콜 구현
func didFinishTask(_ sender: TaskManager, result: String) {
print("Task finished with result: \(result)")
}
}
// 사용 예시
let viewController = ViewController() // 출력: Task finished with result: Task result
위 예제에서 TaskDelegate 프로토콜은 작업 완료 시 호출되는 didFinishTask(_:result:) 메서드를 정의합니다. 이 프로토콜은 객체가 작업 완료에 대한 처리를 위임받을 때 사용됩니다.
TaskManager 클래스는 작업을 수행하는 책임이 있는 클래스입니다. 이 클래스는 delegate 프로퍼티를 통해 위임 객체를 참조하며, 작업 완료 후 해당 객체에게 알립니다. delegate 프로퍼티는 weak로 선언되어 순환 참조를 방지합니다.
ViewController 클래스는 TaskDelegate 프로토콜을 구현하며, 작업 완료 시 호출되는 didFinishTask(:result:) 메서드를 구현합니다. TaskManager의 인스턴스를 생성하고 delegate 프로퍼티를 설정하여 작업 완료에 대한 처리를 위임받습니다. 작업이 완료되면 didFinishTask(:result:) 메서드가 호출되고, 결과가 출력됩니다.
이 예제는 위임 디자인 패턴을 사용하여 객체 간 작업 처리를 위임하는 방법을 보여줍니다. 이 패턴은 클래스 간의 의존성을 줄이고 코드를 유연하게 만드는 데 도움이 됩니다. 특히, iOS 개발에서 UI 구성 요소의 이벤트 처리 등 다양한 상황에서 위임 패턴을 사용할 수 있습니다.