[kotlin] 옵서버 디자인 패턴과 코틀린

옵서버 디자인 패턴은 소프트웨어 개발에서 관찰자 패턴이라고도 불리며, 한 객체의 상태 변화에 따라 이를 의존하는 다른 객체들에게 연락을 취해 상태 변화에 대한 통지를 하는 디자인 패턴이다. 이번 글에서는 옵서버 디자인 패턴을 코틀린 언어로 구현하는 방법을 알아보겠다.

옵서버 디자인 패턴의 구성요소

옵서버 디자인 패턴은 크게 Subject(주제)Observer(관찰자)로 구성된다. Subject는 상태를 가지고 있으며, 이 상태의 변화를 Observer에 통지한다. Observer는 Subject에 등록되어 상태 변화에 따라 업데이트를 수행한다.

코틀린을 사용한 옵서버 패턴 구현

코틀린에서 옵서버 패턴을 구현하려면 Subject와 Observer를 인터페이스로 정의한 다음, 구체적인 구현을 제공해야 한다. 아래는 간단한 예제 코드이다.

// 주제(Subject)를 나타내는 인터페이스
interface Subject {
    fun registerObserver(observer: Observer)
    fun removeObserver(observer: Observer)
    fun notifyObservers()
}

// 주제를 구현하는 클래스
class ConcreteSubject : Subject {
    private val observers = mutableListOf<Observer>()
    var state: Int = 0
        set(value) {
            field = value
            notifyObservers()
        }

    override fun registerObserver(observer: Observer) {
        observers.add(observer)
    }

    override fun removeObserver(observer: Observer) {
        observers.remove(observer)
    }

    override fun notifyObservers() {
        for (observer in observers) {
            observer.update(state)
        }
    }
}

// 관찰자(Observer)를 나타내는 인터페이스
interface Observer {
    fun update(state: Int)
}

// 관찰자를 구현하는 클래스
class ConcreteObserver(private val subject: Subject) : Observer {
    init {
        subject.registerObserver(this)
    }

    override fun update(state: Int) {
        // 상태 업데이트에 대한 동작 수행
    }
}

위 코드에서는 주제(Subject)와 관찰자(Observer)를 나타내는 인터페이스를 정의하고, 각각을 구현한 ConcreteSubjectConcreteObserver 클래스를 제공한다. Subject는 Observer를 등록하고 삭제하며, 상태 변화에 대한 통지를 제공한다. Observer는 주제에 등록되어 통지를 받고, 상태 업데이트에 대한 작업을 수행한다.

마치며

코틀린을 사용하여 옵서버 디자인 패턴을 구현하는 방법을 살펴보았다. 옵서버 패턴은 객체 간의 느슨한 결합을 가능하게 하며, 유연하고 확장 가능한 소프트웨어를 구축하는데 도움을 준다. 이를 통해 상태 변화에 따라 다양한 동작을 수행하는 시스템을 구현할 수 있다.

참고 문헌: Kotlin Design Patterns