같은 이름을 가질 수 없음
같은 이름을 가질 수 없음 (Cannot Have Same Name As)
어떤 멤버가 다른 정의와 이름이 같아서 법적으로 허용되지 않는 충돌이 생겼을 때 나오는 에러예요.
본문
어떤 멤버가 다른 정의와 같은 이름을 가져서 허용되지 않는 충돌을 만들면 이 에러가 발생해요.
보통 이런 상황에서 나타나요.
- 멤버가 클래스 정의를 오버라이드하려는 경우(클래스 정의는 오버라이드할 수 없음)
- 클래스의 멤버가 자기 타입 참조(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
더 알아보기
- 클래스 정의 대신 추상 타입 멤버와 선택적인 인터페이스를 활용하면 오버라이드 흉내를 낼 수 있어요.