학습 기록 · 2026-07-05
Java 코드 컴파일하고 실행하기
Java 프로그램을 돌리려면 크게 두 단계가 필요하다.
- 컴파일(Compile):
javac컴파일러로 사람이 쓴 Java 소스 코드(.java)를 바이트코드(.class)로 바꾼다. - 실행(Execute):
java명령어로 JVM(자바 가상 머신)을 띄워서 컴파일된 바이트코드를 실행시킨다.
Java 파일 컴파일
javac는 Java 컴파일러다. 이건 우리가 쓴 .java 소스 코드를 JVM이 알아먹는 .class 바이트코드로 번역하는 역할을 한다.
javac가 하는 일:
- 소스 코드 변환:
.java파일을.class파일로 만든다. - 문법 & 타입 체크: 코드에 문법 오류나 타입이 안 맞는 부분이 없는지 확인하고, 문제 있으면 에러를 띄운다.
- 플랫폼 독립성: 컴파일된
.class파일은 OS나 하드웨어에 상관없다. 이게 바로 Java가 "한 번 짜면 어디서든 돌아간다"고 하는 이유다.
이 프로젝트처럼 패키지 구조(java-datastructures 폴더 안에 BST 패키지)가 잡혀있으면, -d 옵션을 붙여주는 게 좋다. 이 옵션은 컴파일된 .class 파일을 어디에 둘지 정해주는 건데, 원래 패키지 구조를 그대로 복사해서 만들어준다.
프로젝트 루트 폴더에서 아래 명령어를 치면 java-datastructures/BST 폴더의 모든 자바 파일을 컴파일할 수 있다.
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 실행:
java -cp java-datastructures BST.BinarySearchTreeDemo
AVLTreeDemo 실행:
java -cp java-datastructures BST.AVLTreeDemo
이렇게 하면 각 데모 클래스 파일 안에 있는 main 메소드가 실행되면서, 이진 탐색 트리랑 AVL 트리가 어떻게 도는지 볼 수 있다.
C 컴파일과의 비교
C는 컴파일 결과가 CPU 아키텍처에 묶인 기계어(컴파일과 링커 참고)지만,
Java는 플랫폼 독립적인 바이트코드를 만들고 JVM이 실행 시점에 해석/컴파일한다.
.class는 어느 환경에서든 재생성 가능한 빌드 산출물이라 git으로 추적하지 않는다
(.gitignore의 *.class).
관련
- 토픽: 컴파일 · 링킹 (Compile & Linking), 트리와 인덱스 (Tree & Index) (BST/AVL 구현체가 실습 대상)
- 실습: java-datastructures/BST