본문 바로가기
swift

Swift Delegate 패턴

by 승환파크 2024. 7. 9.

Swift 에서는 델리게이트(Delegate) 패턴은 객체지향 프로그래밍에서 흔히 사용되는 디자인 패턴으로, 하나의 객체가 다른 객체의 행동을 대신 처리하도록 위임하는 방식이다. 이 패턴은 주로 특정 이벤트나 작업이 발생할 때 다른 객체에게 알리고, 그 객체가 해당 이벤트나 작업에 대한 로직을 처리하도록 사용된다.

 

델리게이트 패턴의 주요 목적은 클래스 간의 결합도를 낮추고, 보다 유연하고 확장 가능한 코드를 작성하기 위해 사용된다. 델리게이트 패턴을 구현하려면 보통 아래와 같은 단계를 따른다.

 

1. 프로토콜 정의

델리게이트 패턴을 사용하기 위해 먼저 델리게이트 프로토콜을 정의한다. 이 프로토콜은 델리게이트 객체가 구현해야 하는 메서드들을 선언한다.

protocol MyDelegate: AnyObject {
    func didCompleteTask()
}

2. 델리게이트 프로퍼티 정의

주 객체는 델리게이트 프로퍼티를 가진다. 이 프로퍼티는 프로토콜 타입으로 선언되며, 주 객체는 이 프로퍼티를 통해 델리게이트 객체에 접근한다.

class TaskManager {
    weak var delegate: MyDelegate?
    
    func startTask() {
        // 작업을 수행한 후 델리게이트 메서드를 호출한다.
        // 작업 완료 후 델리게이트에게 알린다.
        delegate?.didCompleteTask()
    }
}

3. 델리게이트 설정

델리게이트 객체는 주 객체의 델리게이트 프로퍼티에 할당되며, 프로토콜을 준수한다. 델리게이트 객체는 프로토콜의 메서드를 구현한다.

class TaskHandler: MyDelegate {
    func didCompleteTask() {
        print("Task completed!")
    }
}

let taskManager = TaskManager()
let taskHandler = TaskHandler()

taskManager.dlelgate = taskHandler
taskManager.startTask()

 

위 예제에서 'TaskManager' 는 주 객체이며, 'TaskHandler' 는 델리게이트 객체이다. 'TaskManager' 가 'startTask' 메서드를 호출하면 작업이 완료된 후 델리게이트 객체의 'didCompleteTask' 메서드가 호출된다.

델리게이트 패턴의 장점

장점

  1. 결합도 감소 : 클래스 간의 의존성을 줄여 코드의 유지 보수성을 높일 수 있다.
  2. 코드 분리 : 서로 다른 책임을 가지는 코드를 분리하여 코드의 가독성과 재사용성을 높일 수 있다.
  3. 유연성 향상 : 런타임에는 다른 델리게이트 객체를 설정할 수 있어 더 유연한 코드를 작성할 수 있다.

단점

  1. 복잡성 증가 : 작은 프로젝트에서는 델리게이트 패턴이 불필요하게 복잡할 수 있다.
  2. 디버깅 어려움 : 데릴게이트 메서드가 호출되지 않을 경우, 원인을 찾기 어렵다.

'swift' 카테고리의 다른 글

iOS 코디네이터 패턴  (0) 2025.05.19
네트워크 통신  (2) 2024.07.10
CoreData 와 UserDefaults  (0) 2024.07.09
메모리 관리 이해  (0) 2024.07.09
UIViewController 생명주기  (3) 2024.07.09