트레이트는 final일 수 없음
트레이트는 final일 수 없음 (Traits May Not Be Final)
트레이트를 final 수식어와 함께 선언했을 때 나오는 에러예요.
본문
트레이트를 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을 고려해 보세요.