E033: Package Duplicate Symbol — 패키지 이름이 기존 타입과 겹쳐요

E033: Package Duplicate Symbol — 패키지 이름이 기존 타입과 겹쳐요

같은 부모 패키지 안에서 이미 존재하는 타입(클래스나 트레이트)과 같은 이름의 중첩 패키지를 정의하려고 할 때 이 에러가 나와요.

출처: Scala 3 Reference

본문

패키지 이름은 고유해야 해요. 같은 스코프 안의 타입 정의와 충돌하면 안 되거든요. 아래 "예제"의 코드처럼 foo 패키지 안에 id라는 트레이트가 이미 있는데, 다시 id라는 이름의 패키지를 정의하려고 한 상황이에요.

참고로 이 에러는 package 문을 필요로 하는데, package 문은 Scaladoc의 스니펫 컴파일러에서 재현할 수 없어요. 아래 예제들은 코드 구조를 보여줄 뿐 실제로 컴파일되지는 않아요.

예제 (Example)

package foo:
  trait id:
    def bar: Int

package foo:
  package id:  // error: Trying to define package with same name as trait id
    class Bar

오류 메시지 (Error)

-- [E033] Naming Error: example.scala:6:10 -------------------------------------
6 |  package id:  // error: Trying to define package with same name as trait id
  |          ^^
  |          Trying to define package with same name as trait id

해결 방법 (Solution)

타입과 충돌하지 않도록 패키지 이름을 바꾸거나, 반대로 타입 이름을 바꾸면 돼요.

// Use a different package name
package foo:
  trait id:
    def bar: Int

package foo:
  package idPkg:
    class Bar
// Or rename the trait to avoid conflict
package foo:
  trait IdTrait:
    def bar: Int

package foo:
  package id:
    class Bar

더 알아보기 (Learn more)