enum이 아닌 소유자에 enum 케이스를 정의했어요

enum이 아닌 소유자에 enum 케이스를 정의했어요 (E094: Enum Case Definition In Non-Enum Owner)

이 에러는 Scala 3.0.0이 릴리스되기 전에 제거된 에러라, 실제로 스칼라 3 컴파일러가 내보낸 적은 없어요. 초기 enum 구현에서 enum 케이스를 enum 클래스의 컴패니언 객체 밖에 정의하려 할 때 발생하던 에러예요.

출처: Scala 3 Reference

본문

이 에러는 Scala 3.0.0이 릴리스되기 전에 제거되었고, 스칼라 3 컴파일러가 실제로 내보낸 적은 없어요. 초기 enum 구현에서 enum 케이스를 enum 클래스의 컴패니언 객체(companion object) 밖에 정의하려 할 때 발생하던 에러였어요.

예시 (Example)

object Qux {
  case Foo
}

에러 (Error)

-- Error: example.scala:2:2 ----------------------------------------------------
2 |  case Foo
  |  ^^^^^^^^
  |case not allowed here, since owner object Qux is not an enum object

설명 (Explanation)

스칼라 3.0.0 이전의 초기 Dotty 버전에서는 enum 케이스가 enum 클래스의 컴패니언 객체 안에서만 허용되었어요. 컴파일러는 case 정의의 소유자(owner)가 모듈 클래스이고, 연결된 클래스가 scala.runtime.EnumClass에서 파생되었는지 확인했죠.

이 제한은 e1470f488b 커밋(2018년 2월)에서 새 enum 설계로 교체되면서 사라졌어요. 새 설계는 enum 케이스의 검증과 디슈가링(desugaring) 방식을 바꿔서 이 에러를 쓸모없게 만들었죠. 스칼라 3.0.0부터 enum은 이 특정 에러에 의존하지 않는 다른 검증 메커니즘을 사용해요.