(면접복기)자바 컴파일 과정 완벽 정리: .java → 실행까지

2026. 5. 15. 16:41·면접복기

자바는 "컴파일 언어"이면서 "인터프리터 언어"의 특성을 모두 가집니다.
이 글에서는 자바 소스 코드가 어떻게 실행 가능한 프로그램으로 변환되는지, 전체 컴파일 및 실행 과정을 단계별로 설명합니다.

1️⃣ 소스 코드 작성

개발자가 Hello.java 같은 자바 소스 파일을 만듭니다.

java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

 

2️⃣ javac 컴파일: 바이트코드 생성

자바 컴파일러(javac)가 소스 파일을 읽어 플랫폼 독립적인 바이트코드(.class)로 변환합니다.
내부적으로는 다음 네 단계를 거칩니다.

 
단계설명
어휘 분석 소스 코드를 토큰(키워드, 연산자, 식별자 등) 단위로 분해
구문 분석 토큰을 AST(Abstract Syntax Tree)로 만들고 문법 오류 검사
의미 분석 타입 검사, 변수/메서드 존재 확인, import 해석 등
바이트코드 생성 AST를 기반으로 JVM이 이해할 수 있는 .class 파일 생성

실행 명령어:

bash
javac Hello.java   # Hello.class 생성

 

생성된 Hello.class는 사람이 읽기 어렵지만, 아래 명령어로 바이트코드를 확인할 수 있습니다.

bash
javap -c Hello

 

 

3️⃣ 클래스 로딩 (Runtime)

JVM(Java Virtual Machine)이 시작되면 클래스 로더(Class Loader)가 .class 파일을 메모리(Runtime Data Area)에 로드합니다.

  • 로딩: 파일에서 바이트코드를 읽어옴
  • 링크: 검증(바이트코드 안전성 확인) → 준비(static 변수 기본값 할당) → 해석(심볼릭 레퍼런스를 실제 주소로 변환)
  • 초기화: static 블록 및 변수 초기화

4️⃣ 실행 엔진: 바이트코드 → 기계어

JVM 내부의 실행 엔진(Execution Engine)이 바이트코드를 실제로 실행합니다. 여기서 두 가지 방식이 사용됩니다.

  • 인터프리터(Interpreter)
    바이트코드를 한 줄씩 읽고 즉시 기계어로 변환하여 실행.
    초기 속도는 느리지만 메모리 부담이 적음.
  • JIT 컴파일러(Just-In-Time Compiler)
    반복 실행되는 코드(핫스팟, HotSpot)를 감지하여 네이티브 기계어로 컴파일하고 캐싱.
    같은 코드는 다시 해석하지 않아 전체 실행 속도가 크게 향상됨.
  • (옵션) AOT 컴파일러(Ahead-Of-Time)
    실행 전에 미리 네이티브 코드로 컴파일 (Java 9부터 실험적 도입, GraalVM에서 활용)

📊 전체 과정 흐름도 (텍스트 버전)

text
[ .java ]  --javac-->  [ .class ]  --클래스 로더-->  JVM 메모리
                                                         │
                                           ┌─────────────┴─────────────┐
                                           │    실행 엔진              │
                                           │  ┌───────────────┐        │
                                           │  │ 인터프리터    │        │
                                           │  └───────┬───────┘        │
                                           │          ▼                │
                                           │  ┌───────────────┐        │
                                           │  │ JIT 컴파일러  │ (핫스팟)│
                                           │  └───────┬───────┘        │
                                           │          ▼                │
                                           │   네이티브 기계어 실행     │
                                           └───────────────────────────┘

🔍 자주 묻는 질문

Q1. 자바는 컴파일 언어인가 인터프리터 언어인가?
→ 둘 다 사용합니다. javac로 컴파일해서 바이트코드를 만들고, 실행 시 JVM이 인터프리트 + JIT 컴파일로 혼합 실행합니다.

Q2. .class 파일은 OS마다 다른가요?
→ 아닙니다. 같은 버전의 JVM이라면 어느 OS에서든 동일한 .class 파일이 실행됩니다. 이것이 자바의 "Write Once, Run Anywhere" 원리입니다.

Q3. JIT 컴파일의 장점은?
→ 반복 코드를 네이티브 코드로 바꿔 인터프리터보다 훨씬 빠릅니다. 서버용 장기 실행 프로그램에서 성능이 거의 C++ 수준으로 향상됩니다.

📚 마무리

자바 컴파일 과정은 단순히 javac로 끝나는 것이 아니라, JVM의 클래스 로딩과 실행 엔진(인터프리터 + JIT)까지 포함하는 전체 파이프라인입니다.
이 과정을 이해하면 자바 성능 튜닝, 바이트코드 조작, JVM 내부 동작을 더 깊이 있게 파악할 수 있습니다.


✍️ 본 포스트는 자바의 컴파일 및 실행 과정을 초보자도 이해하기 쉽게 정리했습니다.
궁금한 점이나 수정 요청은 댓글로 남겨주세요!

 


 

 

 

 

'면접복기' 카테고리의 다른 글

(면접복기)자바 기본 타입(Primitive Type) 완벽 정리  (0) 2026.05.15
(면접복기)OCP를 준수하는 결제 시스템 확장하기: 전략패턴을 활용한 유연한 설계  (0) 2026.01.27
(면접복기)트랜잭션 격리 수준 (Transaction Isolation Levels)  (0) 2025.11.19
(면접복기)쓰레드 풀 vs 커넥션 풀  (0) 2025.11.19
'면접복기' 카테고리의 다른 글
  • (면접복기)자바 기본 타입(Primitive Type) 완벽 정리
  • (면접복기)OCP를 준수하는 결제 시스템 확장하기: 전략패턴을 활용한 유연한 설계
  • (면접복기)트랜잭션 격리 수준 (Transaction Isolation Levels)
  • (면접복기)쓰레드 풀 vs 커넥션 풀
cookiboii
cookiboii
초보 개발자입니다.
  • cookiboii
    Just Do it
    cookiboii
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 잡소리 (2)
      • vscode꾸미기 (1)
      • 회사공부 (0)
      • 면접복기 (5)
      • 개발취직관련 좋은 글귀 (12)
      • 개발 공부 (58)
        • 백준 (0)
        • web (3)
        • js&ts&react (4)
        • Java-Spring (18)
        • 개발책 리뷰 (0)
        • c++ (0)
        • git (0)
        • code up 문제 (5)
        • 네트워크 (5)
        • 자료구조&알고리즘 (2)
        • ci,cd (1)
        • 프로젝트 (9)
        • sql (4)
        • 컴퓨터구조 (1)
        • 운영체제 (5)
        • python (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

    • 네이버블로그
    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    자바 #Java #JPA #개발자 #개발 #초보
    프로그래밍
    코드업 #코딩문제
    ci #개발 #git
    사이드프로젝트 #토이프로젝트 #개발 #개발자
    라이엇 #api #롤api
    깃허브 #깃 #커밋
    포켓몬 #vscode #vscode꾸미기 #개발
    코딩
    Java
    롤 #리그오브레전드
    JVM
    개발
    js #web
    자바
    springai #spring #java
    js #제이쿼리 #비동기통신 #코딩 #프로그래밍
    js #예약어 #자바스크랩트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
cookiboii
(면접복기)자바 컴파일 과정 완벽 정리: .java → 실행까지
상단으로

티스토리툴바