본문 바로가기
Swift

Swift에서 상태 패턴(State Pattern)의 개념과 예제

by mr.conan 2023. 6. 15.
728x90
반응형

상태 패턴(State Pattern)은 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나입니다. Swift에서도 상태 패턴을 활용하여 객체의 상태에 따라 동작을 변경하고, 유지 보수 가능하고 확장 가능한 코드를 작성할 수 있습니다. 이 블로그 포스트에서는 상태 패턴의 개념을 소개하고, Swift로 구현된 예제를 통해 상태 패턴의 사용법을 알아보겠습니다.

 

상태 패턴의 개념: 상태 패턴은 객체의 내부 상태에 따라 동작을 변경하는 패턴입니다. 객체는 여러 가지 상태를 가지며, 상태에 따라 다른 동작을 수행합니다. 상태 패턴을 사용하면 조건문을 피하고 객체의 상태에 대한 처리를 캡슐화할 수 있어 코드의 가독성과 유지 보수성을 높일 수 있습니다.

상태 패턴 예제:

protocol State {
    func doAction(context: Context)
}

class ConcreteStateA: State {
    func doAction(context: Context) {
        print("Performing action in Concrete State A")
        context.state = ConcreteStateB()
    }
}

class ConcreteStateB: State {
    func doAction(context: Context) {
        print("Performing action in Concrete State B")
        context.state = ConcreteStateA()
    }
}

class Context {
    var state: State

    init(state: State) {
        self.state = state
    }

    func request() {
        state.doAction(context: self)
    }
}

위의 예제에서는 State 프로토콜을 정의하고, ConcreteStateA와 ConcreteStateB 클래스가 이를 구현합니다. Context 클래스는 상태를 관리하며, request() 메서드를 통해 상태에 따라 동작을 수행합니다.

 

사용 예시:

let context = Context(state: ConcreteStateA())

context.request()
context.request()

위의 예시에서는 초기 상태로 ConcreteStateA를 설정한 후, request() 메서드를 호출하여 상태에 따라 동작을 수행합니다. 첫 번째 호출은 ConcreteStateA에서 ConcreteStateB로 상태를 변경하고, 두 번째 호출은 ConcreteStateB에서 ConcreteStateA로 상태를 변경합니다.

728x90
반응형