열거 타입은 거의 모든 상황에서 타입 안전 열거 패턴(typesafe enum pattern)보다 우수하다.

단, 예외가 하나 있으니, 타입 안전 열거 패턴은 확장할 수 있으나 열거 타입은 그럴 수 없다는 것이다.

달리 말하면, 타입 안전 열거 패턴은 열거한 값들을 그대로 가져온 다음 값을 더 추가하여 다른 목적으로 쓸 수 있지만, 열거 타입은 그렇게 할 수 없다.

사실 대부분 상황에서 열거 타입을 확장하는 건 좋은 생각이 아니다.

  1. 확장한 타입의 원소는 기반 타입의 원소로 취급하지만, 그 반대는 성립하지 않으면 이상하다.
  2. 기반 타입과 확장된 타입들의 원소 모두를 순회할 방법도 마땅치 않다.
  3. 확장성을 높이려면 고려할 요소가 늘어나 설계와 구현이 더 복잡해진다.

그런데, 확장할 수 있는 열거 타입이 어울리는 쓰임이 최소한 하나는 있다.

바로 연산코드(operation code; opcode)이다!

연산 코드 (Operation code)