English

javac — Java 컴파일러

개발 / 빌드 / javac.html

빌드원문등록 2026-10-20T09:00:00+09:00

Java 소스를 바이트코드(.class)로 컴파일하는 JDK 도구.

기본 정보

명령어 이름javac
한 줄 소개Java 소스를 바이트코드(.class)로 컴파일하는 JDK 도구.
제공OpenJDK
공식 문서https://docs.oracle.com/en/java/javase/21/docs/specs/man/javac.html
지원 운영체제Linux, macOS, Windows
설치 여부JDK 설치 필요
분류빌드·컴파일 (태그: 언어 툴체인 (태그: javac, Java, 컴파일, JDK))

이 명령어는 무엇인가?

javac는 .java 파일을 JVM이 실행하는 .class 바이트코드로 변환합니다. 결과는 플랫폼 독립적이지만, 실행에는 같은 주 버전 이상의 JRE/JDK가 필요합니다.

패키지 선언과 디렉터리 구조가 일치해야 하며, -d로 출력 디렉터리를 지정하면 패키지 경로가 자동 생성됩니다. 서로 참조하는 파일은 함께 지정해 컴파일하는 것이 안전합니다.

어떤 문제를 해결하는가?

  • Java 소스를 컴파일해 바이트코드를 만들 때
  • 패키지 구조를 유지하며 출력 디렉터리를 분리할 때
  • 특정 릴리스(--release)로 호환성을 맞출 때
  • 여러 소스를 한 번에 컴파일할 때

주요 기능

바이트코드 생성

소스 파일을 .class로 컴파일합니다.

  • 활용 상황: 간단한 클래스를 시험할 때
  • 얻는 결과: JVM에서 실행 가능한 결과가 나옵니다.
  • 제한 사항: 실행은 java 명령으로 별도 수행해야 합니다.

출력 디렉터리

-d로 패키지에 맞는 디렉터리에 출력합니다.

  • 활용 상황: 패키지가 있는 프로젝트를 빌드할 때
  • 얻는 결과: classpath 구성이 단순해집니다.
  • 제한 사항: 기존 출력물이 남아 있으면 혼동될 수 있습니다.

릴리스 대상 지정

--release로 API와 바이트코드 버전을 고정합니다.

  • 활용 상황: 구버전 JVM과의 호환성이 필요할 때
  • 얻는 결과: 상위 버전 API를 실수로 쓰는 문제를 막습니다.
  • 제한 사항: 지정 릴리스에 없는 API는 컴파일 오류가 됩니다.

설치 및 실행

설치 여부 확인

javac -version

sudo apt install openjdk-21-jdk-headless # Debian/Ubuntu sudo dnf install java-21-openjdk-devel # Fedora

실제 사용 예제

단일 파일 컴파일

클래스 파일을 생성합니다.

javac Hello.java
java Hello

패키지 프로젝트

출력 디렉터리를 지정해 패키지 구조를 만듭니다.

javac -d out $(find src -name '*.java')
java -cp out com.example.Main

릴리스 고정

구버전 호환을 위해 릴리스를 지정합니다.

javac --release 17 -d out src/Main.java