Swift 프로토콜과 델리게이트 활용하기: 객체간 통신을 위한 패턴 설명

작성일 :

Swift 프로토콜과 델리게이트 활용하기: 객체간 통신을 위한 패턴 설명

Swift에서 객체 간 효율적으로 데이터를 주고받기 위해 프로토콜과 델리게이트 패턴을 자주 사용합니다. 이러한 패턴은 코드의 재사용성과 유연성, 유지 보수성을 높이는 데 큰 도움이 됩니다. 이 글에서는 Swift 프로토콜과 델리게이트 패턴에 대해 상세히 알아보고, 실제 구현 예제를 통해 어떻게 사용하는지 살펴보겠습니다.

프로토콜의 기본 개념

프로토콜은 특정 작업이나 기능을 정의하는데 사용됩니다. 이는 마치 인터페이스와 비슷하며, 객체가 특정 메서드나 속성을 반드시 구현하게 강제합니다. 프로토콜의 기본 문법은 다음과 같습니다:

swift
protocol SomeProtocol {
    var mustBeSettable: Int { get set }
    var doesNotNeedToBeSettable: Int { get }
    func someMethod() -> String
}

여기서 SomeProtocol은 두 개의 속성과 하나의 메서드를 정의하고 있습니다. 이를 구현하는 클래스나 구조체는 반드시 이러한 속성과 메서드를 포함해야 합니다.

델리게이트 패턴

델리게이트 패턴은 특정 객체가 해야 할 일을 다른 객체에 위임하는 디자인 패턴입니다. 이를 통해 객체 간의 결합도를 낮추고, 더 독립적이고 모듈화된 코드를 작성할 수 있습니다. 흔히 UI 구성 요소 중 일부 작업을 다른 객체에 위임할 때 사용됩니다. 델리게이트 패턴을 사용하려면 아래와 같은 구성요소가 필요합니다:

  1. 프로토콜 정의: 델리게이트가 구현해야 할 메서드를 정의합니다.
  2. 델리게이트 선언: 주 객체에서 델리게이트를 선언합니다.
  3. 델리게이트 메서드 호출: 필요한 시점에 델리게이트 메서드를 호출합니다.
  4. 델리게이트 구현: 다른 객체에서 실제 동작을 구현합니다.

델리게이트 패턴 구현 예제

다음 예제는 간단한 델리게이트 패턴을 구현하여 버튼 클릭 이벤트를 다른 객체에서 처리하는 방식입니다. 이를 통해 델리게이트 패턴이 어떻게 동작하는지 이해할 수 있을 것입니다.

1. 프로토콜 정의

먼저 버튼 클릭 이벤트를 처리하는 프로토콜을 정의합니다:

swift
protocol ButtonDelegate: AnyObject {
    func didTapButton(_ sender: UIButton)
}

2. 델리게이트 선언

이제 버튼 클래스를 정의하고 델리게이트를 선언합니다:

swift
class CustomButton: UIButton {
    weak var delegate: ButtonDelegate?

    @objc func buttonTapped() {
        delegate?.didTapButton(self)
    }
}

여기서 buttonTapped 메서드는 버튼이 클릭되었을 때 호출되며, 델리게이트의 didTapButton 메서드를 호출합니다.

3. 델리게이트 메서드 구현

델리게이트를 구현하는 다른 객체를 정의합니다:

swift
class ViewController: UIViewController, ButtonDelegate {
    let button = CustomButton(type: .system)

    override func viewDidLoad() {
        super.viewDidLoad()

        button.setTitle(