
클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다.
소스파일에 자신이 속할 패키지를 지정하지 않은 클래스는 자동적으로 '이름 없는 패키지(unnamed package)'에 속하게 된다. 결국 패키지를 지정하지 않는 모든 클래스들은 같은 패키지에 속하는 셈이 된다.
package com.hyeonho.genius; // <-Like this we can declare the package.
public class PackageTest {
public static void main(String[] args) {
System.out.println("hello world.");
}
}
! javac -d . PackageTest.java: this generates declared package on current directory.
이제는 패키지의 루트 디렉토리를 클래스패스에 포함시켜야 한다. (이 경우 루트 디렉토리는 com 디렉토리의 상위 디렉토리) 이 디렉토리(루트디렉토리)를 클래스패스에 포함시켜야만 실행 시 JVM이 PackageTest클래스를 찾을 수 있다.
jDK에 기본적으로 설정되어 있는 클래스패스를 이용하면 위의 예제에서와 같이 클래스 패스를 따로 설정하지 않아도 된다. 새로 추가하고자 하는 클래스를 'JDK 설치 디렉토리/jre/classes'디렉토리에, jar파일인 경우에는 'jdk설치 디렉토리/jre/lib/ext'디렉토리에 넣기만 하면 된다.

java com.hyeonho.genius.PackageTest로 실행하면 아무 문제 없는데, vs code에서 실행하면 에러가 나고, IDE도 제대로 인식하지 못한다.The declared package "com.hyeonho.genius" does not match the expected package ""Java(536871240)라고 에러가 뜬다.
이 오류는 VS Code가 com.hyeonho.genius 패키지와 관련된 Java 파일을 올바르게 인식하지 못하고 있다는 것을 나타냅니다. 문제는 다음과 같은 여러 가지 원인으로 발생할 수 있습니다:
1. 파일 경로와 패키지 선언 불일치:
Java에서 패키지를 사용할 때, 파일 시스템 내에서의 경로가 패키지 선언과 일치해야 합니다. 예를 들어, com.hyeonho.genius.PackageTest 클래스를 작성한 경우, 해당 파일은 com/hyeonho/genius/PackageTest.java 경로에 있어야 합니다.
2. launch.json 또는 settings.json 설정 문제:
VS Code에서 프로젝트 구조와 클래스 경로를 잘못 인식하거나, 패키지와 클래스 경로가 일치하지 않는 경우 이런 오류가 발생할 수 있습니다.
3. src 디렉토리 설정 문제:
VS Code에서 Java 프로젝트를 제대로 관리하려면 src 디렉토리나 src/main/java 디렉토리와 같은 경로가 제대로 설정되어 있어야 합니다. src 디렉토리 내에서 com/hyeonho/genius 경로로 Java 파일이 있어야 합니다.
오 웬일로 1번을 따라 파일 위치를 옮겼더니 해결됐다. 끝.