사내 솔루션을 건드려보며 학습하던 중 아래와 같은 오류를 만나게 되었다.
오류의 원인
해당 오류는 패키지명과 클래스명이 충돌할 때 발생한다고 한다.
그렇다면 왜 패키지명과 클래스명이 같면 안 될까?
그 이유는 Java에서 동일한 이름을 가진 패키지와 클래스가 있을 때 컴파일러가 혼동을 일으키기 때문이다.
깊은 이해를 위해 필자의 상황으로 예시를 들어보자.
package com.my.example.test;
public class Example {
// 클래스 내용
}
필자는 `com.my.example` 패키지에 새롭게 `test`라는 패키지를 생성하였다.
그런데 생성 후 패키지 내에 파일을 만드니 위처럼 컴파일 오류가 발생한 것이다.
package com.my.example;
public class Test {
// 클래스 내용
}
확인해보니 `com.my.example` 패키지 하위에는 `Test.java` 파일이 이미 존재하고 있었다.
당연히 이 파일 내에는 `Test` 클래스가 구현되어 있었다.
하지만 패키지와 클래스는 완전히 다른 용도인데, Java 컴파일 시 왜 혼동이 생긴다는 걸까?
package com.my.example;
import com.my.example.test.*; //test 패키지 import
import com.my.example.Test; //Test 클래스 import
public class Main {
public static void main(String[] args) {
Test test = new Test();
Example example = new Example();
}
}
위 코드는 `Main.java`에서 `test` 패키지의 모든 클래스와 `Test` 클래스를 가져오고자 하는 코드이다.
이러한 상황이 생길 때, 컴파일러는 `com.my.example.test` 패키지와 `com.my.example.Test` 클래스를 혼동하게 된다.
Path 작성 시 이름으로 인한 혼동을 피하기 위해서는 패키지명과 클래스명이 같으면 안 된다는 것이다.
package com.my.example.test;
public class Test {
// 클래스 내용
}
위 이유와 비슷하게, 패키지 내에 동일한 이름을 가진 클래스를 생성하는 것도 컴파일 오류를 발생시킨다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
toString()과 String.valueOf(), (String) 캐스팅 차이점 (0) | 2024.07.12 |
---|