§6.4.1 의 한 문장이 전체 상태 모델을 결정한다.
"도어의 잠금 상태와 물리적 개폐 상태를 서로 독립적으로 구분해야 한다."
| 물리 CLOSED | 물리 OPEN | |
|---|---|---|
| UNLOCKED | 정상 — 탑승 가능 | 정상 — 승하차 중 |
| LOCKED | 정상 — 주차 상태 | 비정상 조합 |
LOCKED × OPEN 이 왜 문제인가
래치가 잠겨 있는데 문이 열려 있을 수는 없다. 이 조합이 관측되면 셋 중 하나다 — 개폐 센서 고장, 잠금 피드백 센서 고장, 실제로 문이 강제로 열림(도난·사고).
세 경우 모두 "정상 상태"로 처리하면 안 된다.
모순을 임의로 해소하지 마라
§6.4.1 이 특별히 못 박는다.
"비정상적인 도어 상태 조합이 발생한 경우 실제 확인된 도어 상태를 임의의 정상 상태로 변경하여 표시하지 않아야 한다."
개발자가 흔히 하는 짓을 금지하는 것이다.
if (lock == LOCKED && ajar == OPEN) return DOOR_LOCKED; /* ✗ 모순이니 잠금 쪽을 믿자 */
모순을 정리하면 정보가 사라진다. 사용자는 "잠김"을 보고 차를 떠나지만 실제로는 문이 열려 있을 수 있고, 도난으로 이어진다. 모순은 해소하는 게 아니라 보고하는 것이다.
정직한 상태 모델은 정상 3 + INCONSISTENT + UNTRUSTED 로 다섯이 된다.