E206: Enum May Not Be Value Class
E206: Enum May Not Be Value Class
이 에러는 AnyVal을 상속하는 enum을 정의하려고 할 때 발생해요. Scala 3의 enum은 값 클래스(value class)가 될 수 없어요.
본문
값 클래스는 런타임 객체 할당을 피하는 타입을 정의하기 위한 메커니즘이에요. 하지만 Scala 3에서 enum이 구현되는 방식과는 맞지 않아요. enum은 자신의 케이스를 표현하기 위해 클래스 계층이 필요한데, 값 클래스로는 그것이 불가능해요.
예시 (Example)
enum Orientation extends AnyVal:
case North, South, East, West
에러 (Error)
-- [E206] Syntax Error: example.scala:1:5 --------------------------------------
1 |enum Orientation extends AnyVal:
| ^
| class Orientation may not be a value class
해결 방법 (Solution)
enum 정의에서 extends AnyVal 절을 제거해요.
enum Orientation:
case North, South, East, West
성능상 가벼운 표현이 필요하다면, 대신 불투명 타입(opaque type)을 사용하는 것도 고려해 봐요.
object Orientation:
opaque type Orientation = Int
val North: Orientation = 0
val South: Orientation = 1
val East: Orientation = 2
val West: Orientation = 3