[swift] Observer 디자인 패턴으로 상태 변화 감지 및 통지 처리

Observer 디자인 패턴은 객체의 상태 변화를 다른 객체에게 전파하는 효율적인 방법을 제공합니다. 이는 주로 모델-뷰 간의 상호작용에서 많이 활용됩니다.

원리

Observer 패턴은 SubjectObserver로 구성됩니다. Subject는 상태 변화를 감지하고, Observer는 Subject의 상태 변화를 구독하여 통지를 받습니다. Subject는 Observer들을 관리하고, 상태가 변할 때마다 Observer에게 통지를 전송합니다.

Swift 구현

// Subject 프로토콜 정의
protocol Subject {
    func registerObserver(_ observer: Observer)
    func removeObserver(_ observer: Observer)
    func notifyObservers()
}

// Observer 프로토콜 정의
protocol Observer {
    func update(_ value: Any)
}

// Subject 구현
class ConcreteSubject: Subject {
    private var observers = [Observer]()

    func registerObserver(_ observer: Observer) {
        observers.append(observer)
    }

    func removeObserver(_ observer: Observer) {
        if let index = observers.firstIndex(where: { $0 === observer }) {
            observers.remove(at: index)
        }
    }

    func notifyObservers() {
        for observer in observers {
            observer.update(self)
        }
    }

    func changeState(_ newState: Any) {
        // 상태 변화 로직
        notifyObservers()
    }
}

// Observer 구현
class ConcreteObserver: Observer {
    func update(_ value: Any) {
        // 상태 변화에 대한 통지를 받아 처리하는 로직
    }
}

위 예시는 Swift에서 Observer 디자인 패턴을 구현한 것입니다. ConcreteSubject는 Subject 프로토콜을 따르며, ConcreteObserver는 Observer 프로토콜을 따릅니다. ConcreteSubject는 Observer들을 관리하고, 상태가 변할 때마다 Observer들에게 통지를 전송합니다.

이처럼 Observer 디자인 패턴은 객체 간의 느슨한 결합을 통해 유연하고 확장 가능한 코드를 작성할 수 있도록 도와줍니다.

결론

Observer 디자인 패턴은 객체 간의 상태 변화를 감지하고 통지하는데 효과적으로 활용될 수 있습니다. 이를 통해 모델의 상태 변화가 발생했을 때 뷰에 즉각적으로 반영되도록 하는 등의 다양한 상황에서 유용하게 활용될 수 있습니다.

관련 내용을 보다 자세히 학습하고 싶다면 아래 출처를 참고해보세요: