위임(Delegation) 디자인패턴

위임(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 구성 요소의 이벤트 처리 등 다양한 상황에서 위임 패턴을 사용할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다