값 클래스는 비-매개변수 필드를 정의할 수 없음
값 클래스는 비-매개변수 필드를 정의할 수 없음 (Value Classes May Not Define Non Parameter Field)
값 클래스(AnyVal을 상속한 클래스)가 주 생성자 매개변수가 아닌 val/var 필드를 정의했을 때 나오는 에러예요.
본문
값 클래스(AnyVal을 상속한 클래스)가 주 생성자 매개변수가 아닌 val이나 var 필드를 정의하면 이 에러가 발생해요.
값 클래스는 주 생성자의 단일 val 매개변수 하나만 가질 수 있어요. 추가 필드가 생기면 객체 할당이 필요해져서 값 클래스의 존재 목적이 무너지기 때문이에요.
예시
class Wrapper(val value: Int) extends AnyVal:
val doubled = value * 2
에러 메시지
-- [E071] Syntax Error: example.scala:2:6 --------------------------------------
2 | val doubled = value * 2
| ^^^^^^^^^^^^^^^^^^^^^^^
| Value classes may not define non-parameter field
해결 방법
// Use a def instead of val
class Wrapper(val value: Int) extends AnyVal:
def doubled: Int = value * 2
// Or use a regular class if you need fields
class Wrapper(val value: Int):
val doubled = value * 2
더 알아보기
- 필드 대신
def로 계산 결과를 노출하거나, 필드가 꼭 필요하다면 일반 클래스를 쓰면 돼요.