카테고리 없음

xcode) delegate 패턴

나태한개발 2024. 7. 2. 20:45

Delegate 패턴이란?

Delegate 패턴은 한 객체가 다른 객체를 대신하여 특정 동작을 수행하도록 하는 디자인 패턴이다. 이는 객체 간의 결합도를 낮추고 코드 재사용성을 높이는 데 도움을 준다. 주로 다음과 같은 상황에서 사용된다.

  • 이벤트 처리: 사용자의 액션에 따른 이벤트 처리를 위해 delegate를 사용한다.
  • 데이터 전달: 한 객체가 다른 객체로부터 데이터를 받아오거나, 데이터를 전달할 때 사용된다.
  • 커스텀화: 객체의 동작을 확장하거나 수정하기 위해 delegate를 이용한다.

Delegate 패턴의 구현 방법

Delegate 패턴을 구현하기 위해선 몇 가지 단계가 필요하다.

  1. 프로토콜 정의: Delegate가 구현해야 할 메소드나 프로퍼티에 대한 프로토콜을 정의한다.
  2. Delegate 프로퍼티 선언: Delegate 역할을 할 객체의 프로퍼티를 정의하고, 해당 프로토콜을 준수하도록 선언한다.
  3. 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에서 처리를 한다. 이를 통해 두 객체 간의 강력한 연결을 허용하면서도 느슨한 결합을 유지할 수 있다.