E144: Case Class Missing Non-Implicit Parameter List — case 클래스에 비-implicit 파라미터 목록이 없어요

E144: Case Class Missing Non-Implicit Parameter List — case 클래스에 비-implicit 파라미터 목록이 없어요

case 클래스가 맨 앞의 비-implicit 파라미터 목록 없이, implicit 또는 using 파라미터 목록만 가지고 정의될 때 발생하는 에러예요.

출처: Scala 3 Reference

본문

case 클래스가 맨 앞의 비-implicit 파라미터 목록 없이, implicit 또는 using 파라미터 목록만 가지고 정의될 때 발생해요.

Scala의 case 클래스는 맨 앞에 비-implicit 파라미터 목록이 하나 이상 있어야 해요. case 클래스는 주 생성자 파라미터를 바탕으로 equals, hashCode, toString, copy 같은 메서드를 자동 생성하는데, 이 메서드들이 일반(비-implicit) 파라미터를 기대하기 때문이에요.

예시

case class Example(using x: Int)

에러

-- [E144] Syntax Error: example.scala:1:11 -------------------------------------
1 |case class Example(using x: Int)
  |           ^^^^^^^
  |   A case class must have at least one leading non-implicit parameter list
  |-----------------------------------------------------------------------------
  | Explanation (enabled by `-explain`)
  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  | Example must have at least one leading non-implicit parameter list,
  |  if you're aiming to have a case class parametrized only by implicit ones, you should
  |  add an explicit () as the first parameter list to Example.
   -----------------------------------------------------------------------------

해결 방법

using 절 앞에 명시적인 빈 파라미터 목록을 추가하면 돼요.

// Add an explicit empty parameter list before the using clause
case class Example()(using x: Int)

일반 파라미터를 추가할 수도 있고요.

// Or add a regular parameter
case class Example(value: String)(using x: Int)

파라미터가 필요 없다면 일반 클래스나 객체를 사용하는 걸 고려해보세요.

// If no parameters are needed, consider using a regular class or object
class Example(using x: Int)