CSAPP Wiki

학습 기록 · 2026-07-05

Java 코드 컴파일하고 실행하기

Java 프로그램을 돌리려면 크게 두 단계가 필요하다.

  1. 컴파일(Compile): javac 컴파일러로 사람이 쓴 Java 소스 코드(.java)를 바이트코드(.class)로 바꾼다.
  2. 실행(Execute): java 명령어로 JVM(자바 가상 머신)을 띄워서 컴파일된 바이트코드를 실행시킨다.

Java 파일 컴파일

javac는 Java 컴파일러다. 이건 우리가 쓴 .java 소스 코드를 JVM이 알아먹는 .class 바이트코드로 번역하는 역할을 한다.

javac가 하는 일:

이 프로젝트처럼 패키지 구조(java-datastructures 폴더 안에 BST 패키지)가 잡혀있으면, -d 옵션을 붙여주는 게 좋다. 이 옵션은 컴파일된 .class 파일을 어디에 둘지 정해주는 건데, 원래 패키지 구조를 그대로 복사해서 만들어준다.

프로젝트 루트 폴더에서 아래 명령어를 치면 java-datastructures/BST 폴더의 모든 자바 파일을 컴파일할 수 있다.

Shell
javac -d java-datastructures java-datastructures/BST/*.java

이 명령어는 java-datastructures/BST 안의 모든 .java 파일을 컴파일하고, 결과물인 .class 파일들을 java-datastructures 폴더 안에 BST 패키지 구조를 그대로 만들어서 넣어준다. (예: java-datastructures/BST/BinarySearchTree.class)

컴파일할 때 "unchecked or unsafe operations" 같은 경고가 뜰 수도 있는데, 보통 제네릭 쓸 때 타입 정보가 좀 모자라서 뜨는 거라 지금은 무시해도 된다.

데모 프로그램 실행

컴파일이 끝났으면 java 명령어로 데모 프로그램을 돌려볼 수 있다. 이때 -cp(classpath) 옵션이 중요한데, JVM한테 실행할 .class 파일이 어디 있는지 알려주는 역할을 한다.

BinarySearchTreeDemo 실행:

Shell
java -cp java-datastructures BST.BinarySearchTreeDemo

AVLTreeDemo 실행:

Shell
java -cp java-datastructures BST.AVLTreeDemo

이렇게 하면 각 데모 클래스 파일 안에 있는 main 메소드가 실행되면서, 이진 탐색 트리랑 AVL 트리가 어떻게 도는지 볼 수 있다.

C 컴파일과의 비교

C는 컴파일 결과가 CPU 아키텍처에 묶인 기계어(컴파일과 링커 참고)지만, Java는 플랫폼 독립적인 바이트코드를 만들고 JVM이 실행 시점에 해석/컴파일한다. .class는 어느 환경에서든 재생성 가능한 빌드 산출물이라 git으로 추적하지 않는다 (.gitignore의 *.class).

관련