E112: Unable to Extend Sealed Class

E112: Unable to Extend Sealed Class (sealed 클래스 확장 불가)

다른 소스 파일에서 sealed 클래스나 트레이트를 상속하려 할 때 나오는 에러예요.

출처: Scala 3 Reference

본문

sealed 클래스와 트레이트는 선언된 소스 파일 안에서만 확장할 수 있어요. 이 제약 덕분에 철저한(exhaustive) 패턴 매치가 가능해지죠.

예시

sealed trait Animal
case class Dog(name: String) extends Animal
case class Cat(name: String) extends Animal

에러 메시지

-- [E112] Syntax Error: example.scala:1:32
1 |case class Cat(name: String) extends Animal
  |                                     ^^^^^^
  |                     Cannot extend sealed trait Animal in a different source file

해결 방법

모든 하위 클래스를 sealed 트레이트와 같은 파일에 정의하거나, sealed 대신 open이나 추상 클래스를 사용하면 돼요.

// Define all subclasses in the same file as the sealed trait
sealed trait Animal
case class Dog(name: String) extends Animal
case class Cat(name: String) extends Animal
// Or use an open or abstract class instead of sealed
abstract class Animal
case class Dog(name: String) extends Animal
// Cat can now be defined in another file