[swift] 클래스의 상태(State) 패턴 적용

클래스의 상태(State) 패턴은 객체의 상태에 따라 동작을 변경하는 패턴입니다. 이 패턴은 객체의 행위를 상태에 따라 캡슐화하여, 객체가 자신의 상태에 따라 행위를 변경할 수 있도록 돕습니다.

Swift 언어로 상태 패턴을 적용한 예제를 살펴보겠습니다.

상태(State) 프로토콜 정의

protocol State {
    func doAction(context: Context)
}

위 코드는 State 프로토콜을 정의한 것입니다. 해당 프로토콜은 상태에 대한 행위를 정의합니다.

구체적인 상태(State) 객체 정의

class StartState: State {
    func doAction(context: Context) {
        print("Player is in start state")
        context.state = self
    }
}

class StopState: State {
    func doAction(context: Context) {
        print("Player is in stop state")
        context.state = self
    }
}

위 코드는 StartStateStopState 클래스로 각각의 상태에 대한 행위를 구현한 것입니다.

Context 클래스 정의

class Context {
    var state: State
    
    init(state: State) {
        self.state = state
    }
    
    func doAction() {
        state.doAction(context: self)
    }
}

Context 클래스는 상태를 가지고 있으며, 현재 상태에 따라 행위를 수행하는 doAction 메서드를 가지고 있습니다.

상태 패턴 적용

let context = Context(state: StartState())
context.doAction()

context.doAction()

위 코드는 Context 클래스를 생성하고 초기 상태를 StartState로 설정한 후, doAction 메서드를 호출하는 예제입니다.

이렇게 상태 패턴을 적용하면 객체의 행위를 쉽게 확장하고 상태에 따라 분리할 수 있어 유지 보수가 용이해집니다.

참고 자료