상태 다이어그램
“객체의 상태 변화와 전이 조건을 표현하는 행위 다이어그램.”
상태 다이어그램이란
상태 다이어그램(State Diagram)은 하나의 객체가 생애 동안 거치는 상태와 그 사이를 오가는 전이를 표현하는 행위 모델이다. 객체가 어떤 사건에 반응해 어떤 상태로 바뀌고, 그 변화가 어떤 조건에서 허용되는지를 한 장의 그림으로 정리한다.
UML의 여러 다이어그램 중에서도 시간의 흐름에 따른 객체의 내부 동작을 다룬다는 점에서 정적인 구조도와 구분된다. 분석·설계 단계에서 복잡한 제어 논리를 명확하게 드러내는 데 쓰이며, 말로 설명하면 길고 모호해지는 조건부 동작을 한눈에 파악하게 해 준다.
특히 상태에 따라 같은 요청이 다르게 처리되는 시스템에서 그 진가가 드러난다.
상태·전이·사건의 구성
상태 다이어그램의 핵심 요소는 상태, 전이, 사건, 가드 조건이다. 상태는 객체가 특정 시점에 머무는 조건이나 상황을 뜻하며, 시작 상태와 종료 상태가 양 끝을 이룬다.
전이는 한 상태에서 다른 상태로 넘어가는 화살표이고, 그 위에 어떤 사건이 방아쇠가 되는지와 어떤 조건일 때 허용되는지를 함께 표기한다. 같은 사건이라도 가드 조건이 다르면 전이의 결과가 달라지므로, 조건의 명세가 모델의 정확성을 좌우한다.
어떤 객체에 적합한가
모든 객체가 상태 다이어그램의 대상이 되는 것은 아니다. 단순히 값을 담고 전달하는 객체는 이 모델을 그릴 필요가 거의 없다.
주문, 결제, 계약, 단말 연결처럼 생애 동안 뚜렷하게 구분되는 국면을 거치고 그 국면에 따라 허용되는 행위가 달라지는 객체가 핵심 대상이다. 이런 객체일수록 상태 전이 규칙을 말이나 표로 적으면 누락과 모순이 생기기 쉬우므로, 도식으로 통제하는 편이 안전하다.
대상 객체를 잘 고르는 것 자체가 모델링의 첫 단추이며, 가치가 낮은 객체에 도식을 남발하면 산출물만 늘고 정작 중요한 흐름이 묻힌다.
| 요소 | 의미 | 표기 위치 |
|---|---|---|
| 상태 | 객체가 머무는 상황 | 둥근 사각형 |
| 전이 | 상태 간 이동 | 화살표 |
| 사건 | 전이의 방아쇠 | 전이 라벨 |
| 가드 | 전이 허용 조건 | 대괄호 [ ] |
시퀀스 다이어그램과의 차이
같은 행위 모델이라도 관점이 다르다. 시퀀스 다이어그램이 여러 객체 사이에 오가는 메시지의 순서, 즉 협력 과정을 시간 축으로 보여 준다면, 상태 다이어그램은 단일 객체 하나가 내부적으로 어떻게 변하는지에 초점을 둔다.
둘은 경쟁 관계가 아니라 보완 관계다. 객체 간 상호작용으로 흐름을 잡은 뒤, 그 가운데 상태 변화가 복잡한 객체를 골라 상태 다이어그램으로 깊이 파고드는 순서가 자연스럽다.
두 시각을 교차로 검토하면 설계의 빈틈이 드러난다.
설계와 검증에서의 쓰임
상태 다이어그램은 요구사항을 구현으로 옮기는 다리 역할을 한다. 명확하게 정의된 상태와 전이는 코드의 분기 구조와 거의 일대일로 대응하므로, 개발자는 빠뜨린 경우의 수를 줄일 수 있다.
또한 도달할 수 없는 상태나 빠져나갈 수 없는 막다른 상태를 시각적으로 점검할 수 있어 설계 결함을 조기에 잡는다. 테스트 설계에서도 각 전이를 한 번씩 밟는 경로를 도출해 시험 케이스의 기준선으로 삼을 수 있다.
모델이 곧 검증 자산이 되는 것이다.
작성 시 흔한 실수
실무에서 가장 잦은 문제는 상태의 입도를 잘못 잡는 것이다. 너무 잘게 나누면 그림이 복잡해져 읽히지 않고, 너무 뭉뚱그리면 정작 중요한 분기를 가린다.
또 하나의 함정은 전이 위에 사건만 적고 가드 조건을 생략하는 것이다. 조건이 빠지면 같은 사건에 대해 어느 전이를 타는지 모호해져 구현 단계에서 해석이 갈린다.
모든 상태가 시작 상태에서 도달 가능하고 종료로 수렴하는지, 정의된 사건이 빠짐없이 처리되는지를 마지막에 점검하는 습관이 모델의 완성도를 높인다.
관련 용어