자바 컴파일이란? | 초보자를 위한 “컴파일” 이해
Java에서 “컴파일”은 인간이 작성한 소스 코드(.java)를 Java Virtual Machine(JVM)이 읽을 수 있는 형식으로 변환하는 과정을 의미합니다.
이 과정의 출력은 .class 파일이며, 이를 바이트코드라고 합니다.
C와 같이 직접 네이티브 머신 코드로 컴파일되는 언어와 달리, Java는 먼저 소스 코드를 바이트코드로 변환한 뒤 JVM에서 실행합니다.
이 메커니즘 덕분에 동일한 .class 파일이 다양한 운영 체제에서 실행될 수 있어, 같은 Java 프로그램을 Windows, macOS, Linux에서 실행할 수 있습니다.
또 다른 중요한 점은 컴파일과 실행이 별개의 작업이라는 것입니다.
- “javac” → 컴파일을 담당
- “java” → 실행을 담당
초보자 중 약 90%가 이 구분이 명확하지 않아 어려움을 겪습니다.
이 두 명령이 서로 다른 역할을 한다는 것을 확실히 이해하는 것이 가장 효율적인 첫 단계입니다.
Java 컴파일 요구 사항
Java 코드를 컴파일하려면 JDK(Java Development Kit)가 설치되어 있어야 합니다.
JRE만으로는 충분하지 않은데, javac 컴파일러는 JDK에만 포함된 개발자 도구이기 때문입니다.
먼저 다음을 확인하세요:
javac -version
이 명령이 버전 번호를 반환하면 정상입니다.
“command not found”와 같은 메시지가 표시되면 다음 중 하나가 원인일 가능성이 높습니다:
- JDK가 설치되지 않음
- JDK는 설치되었지만 PATH가 설정되지 않음
- JRE만 설치됨(개발 도구 없음)
특히, PATH 설정은 초보자들이 흔히 겪는 장애물입니다.
시스템이 javac가 포함된 디렉터리(또는 bin 디렉터리)를 찾지 못하면 컴파일이 작동하지 않습니다.
결론:
“JDK 설치”와 “PATH 확인”이 모두 올바르게 완료된 후에야 Java 컴파일을 시작할 수 있습니다.
실제로 Java 파일 컴파일하기
여기서는 간단한 샘플 프로그램을 만들고 javac를 사용해 컴파일합니다.
먼저 다음 내용을 텍스트 편집기에 저장하세요.
Sample.java
public class Sample {
public static void main(String[] args) {
System.out.println("Hello Java!");
}
}
파일 이름은 Sample.java이어야 하며, public 클래스 이름이 파일 이름과 일치하는 것이 중요합니다.
이 규칙을 위반하면 Java는 컴파일하지 않으며, 이는 초보자들이 흔히 저지르는 실수입니다.
다음으로 터미널이나 명령 프롬프트에서 아래 명령을 실행하세요:
javac Sample.java
컴파일이 성공하면 동일한 디렉터리에 Sample.class 파일이 생성됩니다.
이는 컴파일이 성공적으로 완료되었음을 의미합니다.
이제 다음과 같은 파일을 갖게 됩니다:
- Sample.java (소스 코드)
- Sample.class (바이트코드)
이 두 파일이 준비되면 Java 프로그램을 실행할 준비가 된 것입니다.
컴파일 후 프로그램 실행하기
컴파일 후 다음 단계는 .class 파일을 실행하는 것입니다.
여기서 사용하는 명령은 javac가 아니라 java입니다.
java Sample
핵심은 .class 확장자를 포함하지 않는 것입니다.
java Sample.class와 같이 입력하면 오류가 발생합니다.
Java는 클래스 이름만 지정하여 프로그램을 실행하도록 설계되었습니다.
요약하면:
| Role | Command | Target |
|---|---|---|
| Compile | javac Sample.java | .java file |
| Run | java Sample | Class name (no extension) |
javac와 java의 역할 차이를 명확히 이해하면 초보 단계에서 벗어난 것입니다.
화면에 “Hello Java!”가 표시되면 프로그램이 성공적으로 실행된 것입니다.
이제 최소한의 Java 작업 흐름을 이해한 셈입니다.
흔히 발생하는 오류와 해결 방법
Java 컴파일 중 오류가 발생하는 것은 초보자에게 완전히 정상적인 일입니다.
여기서는 많은 사용자가 겪는 가장 흔한 문제에 초점을 맞춥니다.
1) javac: command not found
거의 100%의 경우 원인은 다음 중 하나입니다:
- JDK가 설치되지 않음
- PATH가 올바르게 설정되지 않음
해결 방법:
javac -version을 실행하세요
→ 작동하지 않으면 JDK를 재설치하고 PATH 설정을 검토하십시오.
2) 컴파일은 성공하지만 .class 파일이 생성되지 않음
가장 흔한 실수는:
파일 이름이 public 클래스 이름과 일치하지 않음
예시:
public class Test {
}
→ 이는 컴파일 오류를 초래합니다.
3) 인코딩 관련 경고
warning: [options] bootstrap class path not set in conjunction with -source 1.7
이러한 경고는 보통 치명적인 오류가 아닙니다.
그러나 이는 오래된 소스 옵션이나 인코딩 불일치를 나타낼 수 있습니다.
문제를 피하기 위해 항상 파일을 UTF-8로 저장하세요.
IDE를 사용한 컴파일
실제 Java 개발에서 개발자들은 명령줄에서 javac를 수동으로 실행하는 경우가 거의 없습니다.
이는 IDE(통합 개발 환경)가 컴파일을 자동으로 처리하기 때문입니다.
다음 IDE들이 특히 인기 있고 실용적입니다:
| IDE | Features |
|---|---|
| IntelliJ IDEA | The de facto standard for modern Java development, suitable for professional use. |
| Eclipse | A long-established IDE widely used in enterprise projects. |
| VS Code | Lightweight; Java Extension Pack provides a complete environment. |
IDE는 파일을 저장할 때마다 코드를 자동으로 컴파일하고 오류를 즉시 강조 표시합니다.
이는 명령어 오타나 PATH 잘못 설정 같은 초보자 함정을 많이 제거합니다.
그렇긴 하지만, javac로 수동 컴파일을 적어도 한 번 해보는 것은 Java의 내부 작동 방식을 이해하는 데 가치가 있습니다.
“컴파일 → 실행” 흐름을 이해하면 IDE 학습 속도가 크게 향상됩니다.
기본 javac 옵션
javac 명령은 컴파일 방식을 제어하는 많은 옵션을 지원합니다.
초보자 수준에서는 자주 사용되는 몇 가지만 이해하면 됩니다.
다음은 세 가지 대표적인 옵션입니다:
| Option | Description | Example |
|---|---|---|
-d | Specifies the output directory for class files | javac -d out Sample.java |
-classpath | Specifies external libraries or additional class paths | javac -classpath lib/* Sample.java |
--enable-preview | Enables preview language features | javac --enable-preview Sample.java |
-d 옵션은 패키지를 사용할 때 특히 중요합니다.
예를 들어 package com.example;를 사용한다면 javac -d를 생략하면 잘못된 디렉토리 구조가 생성됩니다.
실제 개발로 넘어가면서 클래스패스와 -d 옵션이 점점 더 중요해집니다.
초기에 그 이름만 알아도 미래 학습이 더 수월해집니다.
요약
Java 프로그램을 실행하려면 세 단계 프로세스를 이해해야 합니다: 소스 코드 작성 → 컴파일 → 실행.
javac(컴파일)와 java(실행)의 역할을 명확히 알면 컴파일의 목적이 명확해집니다.
초보자가 가장 자주 저지르는 두 가지 함정은:
- JDK가 설치되지 않았거나 PATH가 설정되지 않음
- 파일 이름이 public 클래스 이름과 일치하지 않음
이것들을 초기에 해결하면 학습 과정에서 불필요한 우회를 피할 수 있습니다.
편안해지면 IDE 기반 개발로 넘어갈 수 있지만, 기본 메커니즘을 이해하면 학습 속도가 크게 향상됩니다.
이 기사를 출발점으로 삼아 먼저 단일 .java 파일을 .class 파일로 성공적으로 변환하는 데 집중하세요.
그 순간이 Java 학습의 첫 번째 진짜 이정표입니다.
FAQ: Java 컴파일에 대한 흔한 질문
Q1: javac와 java의 차이점은 무엇인가요?
A: javac는 .java 파일을 .class 파일로 변환하는 컴파일 명령입니다.
java는 .class 파일을 JVM에서 실행하는 실행 명령입니다.
Q2: 왜 Sample.class가 생성되지 않나요?
A: 가장 흔한 이유는 파일 이름과 public class 이름의 불일치입니다.
클래스가 public class Sample이라면 파일 이름은 Sample.java여야 합니다.
Q3: IDE를 사용한다면 javac를 배울 필요가 있나요?
A: IDE는 코드를 자동으로 컴파일하지만, 프로세스를 이해하지 않으면 배후에서 무슨 일이 일어나는지 알기 어렵습니다. 기본 흐름을 한 번 경험하면 IDE 사용이 훨씬 쉬워집니다.
Q4: 어떤 JDK를 설치해야 하나요?
A: 초보자에게는 Eclipse Adoptium(Temurin)의 LTS 버전이 사용하기 쉽습니다.
특별한 요구사항이 없다면 Java 17 또는 21이 안전한 선택입니다.
Q5: javac: command not found 오류가 발생합니다
A: 이는 JDK가 설치되지 않았거나 PATH가 설정되지 않았음을 의미합니다.
먼저 javac -version으로 확인하세요.

