같은 이름을 가질 수 없음

같은 이름을 가질 수 없음 (Cannot Have Same Name As)

어떤 멤버가 다른 정의와 이름이 같아서 법적으로 허용되지 않는 충돌이 생겼을 때 나오는 에러예요.

출처: Scala 3 Reference

본문

어떤 멤버가 다른 정의와 같은 이름을 가져서 허용되지 않는 충돌을 만들면 이 에러가 발생해요.

보통 이런 상황에서 나타나요.

  • 멤버가 클래스 정의를 오버라이드하려는 경우(클래스 정의는 오버라이드할 수 없음)
  • 클래스의 멤버가 자기 타입 참조(self-type reference)에 정의된 멤버와 같은 이름을 갖는 경우

예시

class Outer:
  class Inner

class Child extends Outer:
  override class Inner

에러 메시지

-- [E069] Naming Error: example.scala:5:17 -------------------------------------
5 |  override class Inner
  |                 ^
  |class Inner cannot have the same name as class Inner in class Outer -- class definitions cannot be overridden

해결 방법

// Use an abstract type member with optional interface
abstract class Outer:
  trait Interface
  type Inner <: Interface

class Child extends Outer:
  class Inner extends Interface

더 알아보기

  • 클래스 정의 대신 추상 타입 멤버와 선택적인 인터페이스를 활용하면 오버라이드 흉내를 낼 수 있어요.