티스토리 뷰

Delegate 패턴?????

객체 지향 프로그래밍에서 많이 사용되는 디자인 패턴 중 하나

객체 간의 상호작용을 할 때 사용함

 

위임하는 객체와 대리하는 객체로 구성됨

대리자 객체는 위임자 객체에서 호출이 가능한 메서드를 구현함

이를 호출하는 위임자 객체는 대리자 객체의 메소드를 대신 호출함

 

객체산 결합도를 낮출 수 있고, 유연하고, 확장 가능한 코드를 작성할 수 있게 됨

Swift에서 Delegate 패턴을 사용하는 방법

1. 프로토콜 정의하기

protocol SomeDelegate: AnyObject {
  func someMethod()
}

2.  위임자 객체 생성하기 

class SomeClass {
    var delegate: SomeDelegate?
    
    func someMethod() {
        delegate?.someMethod()
    }
}

3. 대리자 객체 생성하기

class delegateClass: SomeDelegate {
    init(someClass: SomeClass) {
        someClass.delegate = self
    }
    
    func someMethod() {
        print("실제 해야할 일들을 수행합니다")
    }
}

4. 사용하기

let someClass = SomeClass()
let delegateClass = DelegateClass(someClass: someClass)
someClass.someMethod() // 실제 해야할 일들을 수행합니다

 

혹은 다음과 같이 사용할 수도 있음

class DelegateClass: SomeDelegate {
    
    func someMethod() {
        print("실제 해야할 일들을 수행합니다")
    }
}

let someClass = SomeClass()
let delegateClass = DelegateClass()
someClass.delegate = delegateClass
someClass.someMethod() // 실제 해야할 일들을 수행합니다

 

Delegate 패턴의 장단점

장점

- 객체간의 의존성을 낮출 수 있음

- 코드의 재사용성과 유지보수성 향상

 

단점

- 코드가 복잡해질 수 있음

- 런타임 오버헤드 발생할 수 있음(미미함)

 

고려해야 할 사항

- 정말 Delegate 패턴이 적합한지 여부를 판단할 것

- 프로토콜을 최대한 단순하게 정의할 것

 

 

댓글