값 클래스의 파라미터는 var가 될 수 없어요

값 클래스의 파라미터는 var가 될 수 없어요 (E077: Value Class Parameter May Not Be A Var)

값 클래스의 파라미터를 val 대신 var로 선언하면 이 에러가 나요. 값 클래스는 정확히 하나의 val 파라미터를 가져야 해요.

출처: Scala 3 Reference

본문

값 클래스(AnyVal을 상속하는 클래스)의 파라미터를 var로 선언하면 이 에러가 발생해요. 값 클래스는 val 파라미터가 정확히 하나 있어야 해요.

var는 가변성을 뜻하는데, 이는 값 클래스가 런타임에 표현되는 방식과 어울리지 않아요.

예시 (Example)

class Wrapper(var value: Int) extends AnyVal

에러 (Error)

-- [E077] Syntax Error: example.scala:1:18 -------------------------------------
1 |class Wrapper(var value: Int) extends AnyVal
  |                  ^
  |                  A value class parameter may not be a var
  |-----------------------------------------------------------------------------
  | Explanation (enabled by `-explain`)
  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  | A value class must have exactly one val parameter.
   -----------------------------------------------------------------------------

해결 방법 (Solution)

var 대신 val을 쓰면 돼요.

// Use val instead of var
class Wrapper(val value: Int) extends AnyVal

가변성이 필요하다면 일반 클래스를 쓰는 게 맞아요.

// If you need mutability, use a regular class
class Wrapper(var value: Int)