E011: 암시적 Case Class
E011: 암시적 Case Class (Implicit Case Class)
이 에러는 case class를 implicit 수정자와 함께 정의할 때 발생해요. Scala에서 case class는 implicit일 수 없어요.
본문
case class는 컴패니언 객체와 여러 메서드(apply, unapply, copy 등)를 자동으로 생성하는데, 이것들이 암시적 클래스의 의미론과 충돌하기 때문이에요.
암시적 변환(implicit conversion)을 원한다면 대신 일반 암시적 클래스(plain implicit class)를 쓰세요.
Example
implicit case class Wrapper(value: String)
Error
-- [E011] Syntax Error: example.scala:1:20 -------------------------------------
1 |implicit case class Wrapper(value: String)
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|A case class may not be defined as implicit
|-----------------------------------------------------------------------------
| Explanation (enabled by `-explain`)
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Implicit classes may not be case classes. Instead use a plain class:
|
| implicit class Wrapper...
-----------------------------------------------------------------------------
Solution
// Use a regular implicit class
object Implicits:
implicit class Wrapper(val value: String):
def doubled: String = value + value
import Implicits.*
val result = "hello".doubled
// In Scala 3, prefer extension methods over implicit classes
extension (value: String)
def doubled: String = value + value
val result = "hello".doubled
더 알아보기
- Scala 3에서는 암시적 클래스보다 확장 메서드를 권장해요. "Extension Methods" 섹션을 참고하세요.