E033: Package Duplicate Symbol — 패키지 이름이 기존 타입과 겹쳐요
E033: Package Duplicate Symbol — 패키지 이름이 기존 타입과 겹쳐요
같은 부모 패키지 안에서 이미 존재하는 타입(클래스나 트레이트)과 같은 이름의 중첩 패키지를 정의하려고 할 때 이 에러가 나와요.
본문
패키지 이름은 고유해야 해요. 같은 스코프 안의 타입 정의와 충돌하면 안 되거든요. 아래 "예제"의 코드처럼 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