홈 › 초급 › 00 / 8

개발 환경과 첫 프로그램

섹션 7진행 0 / 8

5. 자주 하는 실수 (Tip)

❌ 실수 1: 파일 이름과 클래스 이름이 다름

java
// 파일: hello.java  (소문자 h)
public class Hello {
    public static void main(String[] args) { }
}

컴파일 오류: class Hello is public, should be declared in a file named Hello.java. 자바는 대소문자를 구분합니다.

✅ 파일 이름을 Hello.java로 맞춥니다.

❌ 실수 2: 실행할 때 .class를 붙임

text
javac Hello.java
java Hello.class      → Error: Could not find or load main class Hello.class

java 명령은 클래스 이름을 받습니다. 파일 이름이 아닙니다. Hello.class라고 쓰면 JVM은 "Hello라는 패키지 안의 class라는 클래스"를 찾으려 합니다.

✅ java Hello

❌ 실수 3: main 시그니처를 변형

java
public class App {
    public void main(String[] args) {   // static 누락
        System.out.println("start");
    }
}

컴파일은 됩니다. 실행하면 Error: Main method is not static in class App. JVM은 객체를 만들지 않고 main을 호출하므로 반드시 static이어야 합니다.

✅ public static void main(String[] args) 그대로 씁니다.

❌ 실수 4: 다른 폴더에서 실행

text
C:\work> javac project\Hello.java     → project\Hello.class 생성
C:\work> java Hello                   → Could not find or load main class Hello

JVM은 현재 폴더(와 classpath)에서만 클래스를 찾습니다. Hello.class는 project 폴더에 있습니다.

✅ cd project 후 java Hello, 또는 java -cp project Hello

❌ 실수 5: 한글이 깨짐

윈도우 터미널에서 System.out.println("안녕")이 ?????로 나오는 경우. 소스 파일 인코딩(UTF-8)과 터미널 인코딩(CP949)이 다르기 때문입니다.

✅ javac -encoding UTF-8 Hello.java로 컴파일하고, 터미널에서 chcp 65001로 코드페이지를 UTF-8로 바꿉니다. VSCode 터미널은 기본이 UTF-8이라 대부분 문제없습니다.

❌ 실수 6: 수정 후 컴파일을 다시 안 함

코드를 고쳤는데 결과가 그대로인 경우. java는 .class를 실행하지 .java를 읽지 않습니다. 수정한 뒤 javac를 다시 돌리지 않으면 옛날 .class가 실행됩니다.

✅ 수정 → javac → java 순서를 지킵니다. (JDK 11 이상은 단일 파일에 한해 java Hello.java로 컴파일+실행을 한 번에 할 수 있습니다.)