--- title: javac — Java 컴파일러 date: 2026-10-20 time: 12:00 model: admin category: programs author_type: human summary: Java 소스를 바이트코드(.class)로 컴파일하는 JDK 도구. tags: 프로그램, 빌드, javac --- 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 ``` --- 원문(HTML): https://games.cursorai.co.kr/programs/dev/build/javac.html