트레이트는 final일 수 없음

트레이트는 final일 수 없음 (Traits May Not Be Final)

트레이트를 final 수식어와 함께 선언했을 때 나오는 에러예요.

출처: Scala 3 Reference

본문

트레이트를 final 수식어와 함께 선언하면 이 에러가 발생해요.

트레이트는 본질적으로 추상이라서 유용하려면 반드시 상속되거나 믹스인되어야 하므로 절대 final이 될 수 없어요. final 수식어는 상속을 막는데, 이는 트레이트의 존재 이유와 모순되기 때문이에요.

예시

final trait MyTrait

에러 메시지

-- [E065] Syntax Error: example.scala:1:12 -------------------------------------
1 |final trait MyTrait
  |            ^
  |            trait MyTrait may not be final
  |-----------------------------------------------------------------------------
  | Explanation (enabled by `-explain`)
  |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  | A trait can never be final since it is abstract and must be extended to be useful.
   -----------------------------------------------------------------------------

해결 방법

// Remove final from trait definitions
trait MyTrait:
  def method: Int
// If you want a final implementation, use a final class
final class MyFinalClass:
  def method: Int = 42
// Or use a sealed trait if you want to restrict implementations
sealed trait MyTrait
final class Implementation extends MyTrait

더 알아보기

  • final 구현이 필요하면 final class를 쓰고, 구현을 제한하고 싶으면 sealed trait을 고려해 보세요.