22. 상태 패턴(State Pattern) 설계

22. 3 디자인

상태 패턴에 대한 설명을 위한 예제로 사용할 프로그램은 카메라의 상태에 따라 다이얼을 조절하였을 때 조리개의 F값을 조절하거나 셔터 스피드를 조절하는 것으로 하겠습니다.

상태 패턴을 적용을 하지 않았을 때에는 카메라 내부에서 상태에 따라 조리개의 F값을 조절하거나 셔터 스피드를 조절할 것을 상태 패턴을 적용하여 상태 개체를 통해  이들 작업을 대행하도록 하겠습니다.

예제로 사용할 프로그램에서의 카메라 상태는 정보 버튼을 누른 상태와 뗀 상태가 존재하며 상태에 따라 다른 동작을 하는 것은 다이얼을 통해 값을 증가하거나 감소시키는 것입니다. 이에 인터페이스 IState에서는 증가와 감소에 해당하는 메서드에 대한 약속을 정의합니다. 그리고, 버튼을 누른 상태인 OnState와 뗀 상태에 해당하는 OffState에서는 IState에서 약속한 메서드를 구체적으로 구현합니다.

카메라에서는 상태에 따라 직접 셔터나 조리개에 값을 변경하는 작업을 수행하는 것이 아니고 상태 개체에 약속한 메서드를 이용해 대행하면 될 것입니다.

여기에서는 상태의 종류가 많지 않고 각 상태에 따라 수행할 구체적 행위가 복잡하지 않기 때문에 충분한 효과를 느끼지 못할 수도 있을 것입니다. 하지만 상태가 여러 종류가 있고 각 상태에 따라 수행하는 구체적 행위가 서로 다른 기술을 사용하거나 복잡하다면 충분히 효과가 있을 것입니다. 여러분들은 프로그램의 목적과 규모, 변경 가능성 등을 고려하여 좋은 선택을 하시기 바랍니다.

상태 패턴 클래스 다이어그램
[그림] 상태 패턴 클래스 다이어그램