큰 그림 JDK·JRE·JVM 컴파일·실행 Hello World 주석 📝 문제풀이
◀ 이전 📋 목차 CH 03 ▶
🛠️ CHAPTER 02 · 입문

개발 환경을 갖추고, 첫 프로그램을 만들어요

지난 장에서 자바가 태어났는지 봤다면, 이번엔 실제로 자바를 돌릴 준비를 해요. JDK·JRE·JVM이 각각 뭔지 그림으로 정리하고, 그 유명한 Hello, World!를 한 줄씩 뜯어봅니다. 하나도 안 어렵게, 천천히 갈게요.

🎯 이 장을 끝내면
🧭
큰 그림
자바 프로그램을 만들려면 뭐가 필요할까?
세부로 들어가기 전에, 전체 지도를 먼저 펼쳐 볼게요.

요리를 한다고 생각해 봐요. 요리를 하려면 ① 조리 도구(칼·냄비)와 ② 불이 들어오는 주방이 필요하죠. 자바도 똑같아요. 자바 프로그램을 만들고 돌리려면 크게 두 가지가 필요합니다.

🍳 자바를 하려면 필요한 두 가지 ① 코드를 "번역"할 도구 — 우리가 쓴 자바 소스 코드는 컴퓨터가 바로 못 읽어요. 그래서 컴파일러(javac)가 컴퓨터가 이해할 형태로 번역해 줘요. 이 도구들이 모인 게 JDK예요.
② 번역된 코드를 "실행"할 환경 — 번역된 코드를 실제로 돌려 주는 실행기가 필요해요. 그 주인공이 JVM이고, JVM에 필요한 부품을 모은 게 JRE예요. 즉, 자바 개발자는 보통 JDK 하나만 설치하면 돼요. JDK 안에 "번역 도구"와 "실행 환경"이 모두 들어 있거든요. 왜 그런지는 바로 다음 섹션에서 그림으로 봅니다.

여기에 하나 더, 실무에서는 코드를 편하게 쓰도록 도와주는 편집기(IDE, 통합 개발 환경)도 많이 써요. 하지만 IDE는 필수는 아니에요 — 메모장으로도 자바를 짤 수 있어요. 이번 장에서는 "필수 재료"인 JDK부터 확실히 이해하는 데 집중할게요.

JDK JRE JVM javac java .java .class Hello World IDE
🧭
이번 장의 읽는 법. "무슨 도구가 뭘 하는지"만 확실히 잡으면 됩니다. 용어(JDK·JRE·JVM)가 비슷비슷해 보여도, 포함 관계 그림 하나만 머리에 넣으면 절대 안 헷갈려요.
📦
JDK · JRE · JVM
셋의 관계를 그림 하나로 끝내요
핵심은 "큰 상자 안에 작은 상자"라는 포함 관계예요.

이름이 비슷해서 처음엔 헷갈리지만, 사실 서로 포함하는 관계예요. 큰 것부터 순서대로 JDK ⊃ JRE ⊃ JVM — 즉 JDK가 JRE를 품고, JRE가 JVM을 품고 있어요. 그림으로 보면 단번에 이해됩니다.

🧰 JDK Java Development Kit · 자바 개발 도구
개발에 필요한 도구들 — 컴파일러 javac, 실행기 java, 디버거 등 + 아래의 JRE를 통째로 포함
🏃 JRE Java Runtime Environment · 자바 실행 환경
프로그램을 실행하는 데 필요한 것 — 표준 라이브러리(미리 만들어진 기능 꾸러미) + 아래의 JVM 포함
⚙️ JVM Java Virtual Machine · 자바 가상 머신
바이트코드(.class)를 실제로 실행하는 심장. 각 OS에 맞게 코드를 돌려 줘요.
이름풀이하는 일대표 포함물
JVMJava Virtual Machine
자바 가상 머신
바이트코드를 실행. 지난 장의 "만국 공통 통역사"가 바로 이거예요.(실행 엔진 자체)
JREJava Runtime Environment
자바 실행 환경
프로그램을 돌리기만 할 때 필요한 세트.표준 라이브러리 + JVM
JDKJava Development Kit
자바 개발 도구
프로그램을 만들고(컴파일) + 돌리는 풀세트.개발 도구(javac 등) + JRE
🔤
용어 — 디버거(Debugger)는 프로그램을 한 줄씩 멈춰 가며 실행해, 어디서 어떤 값이 잘못됐는지 버그(오류)를 찾도록 도와주는 도구예요. 위 JDK 설명에 javac·java와 함께 잠깐 나온 이름인데, 지금은 "코드의 문제를 추적해 주는 도구"라고만 알아 두면 충분해요.
🍽️ 비유 — 식당으로 이해하기 JVM = 요리사 — 실제로 음식을 만들어(코드를 실행해) 내는 사람이에요. 없으면 아무것도 안 돌아가요.
JRE = 요리사 + 주방·식재료 — 요리사(JVM)가 일할 수 있게 주방과 기본 재료(표준 라이브러리)까지 갖춘 세트예요. 손님에게 음식을 내주려면(프로그램을 실행만 하려면) 이 정도면 돼요.
JDK = 그 위에 "요리 개발실"까지 — 새 메뉴를 개발하는 레시피 도구(컴파일러 javac 등)가 추가된 완전판이에요. 요리를 만들기도 하고 내주기도 하는 개발자용 풀세트죠. 그래서 개발자는 JDK를 깔아요(만들기+실행 다 됨). 남이 만든 자바 프로그램을 실행만 할 사람은 이론상 JRE만 있어도 되고요. 우리는 개발을 배우니까 JDK를 설치합니다.
💡
딱 한 줄 요약. JDK ⊃ JRE ⊃ JVM. JDK를 깔면 JRE와 JVM은 자동으로 딸려 와요. 그래서 개발자는 JDK 하나만 설치하면 됩니다.
⬇️
설치는 어떻게?
어떤 JDK를 깔면 되나요?
무료 배포판 하나만 고르면 끝. 어렵지 않아요.

JDK는 여러 회사·단체가 각자 배포판을 내놔요(모두 OpenJDK라는 같은 뿌리에서 나와요). 학습용으로는 무료 OpenJDK 배포판 중 아무거나 하나면 충분해요. 대표적으로 아래가 유명합니다.

배포판만든 곳특징
Eclipse TemurinAdoptium (이클립스 재단)가장 널리 쓰이는 무료·표준 배포판. 입문용으로 무난해요.
Amazon CorrettoAmazon아마존이 무료로 제공하며 장기 지원을 보장해요.
🧩
IDE(통합 개발 환경). 코드를 편하게 쓰도록 자동완성·오류표시·실행버튼을 제공하는 프로그램이에요. 자바에서는 IntelliJ IDEA가 대표적이고, Eclipse·VS Code도 많이 써요. IDE는 선택이지만, 처음부터 하나 깔아 두면 공부가 훨씬 수월해요. (설치 실습은 로드맵의 별도 안내를 참고하세요.)
🔢
어떤 버전을 깔까? 지난 장에서 배운 LTS(장기 지원) 버전을 고르면 안전해요. 지금이라면 Java 17이나 Java 21이 무난합니다.
⚙️
컴파일 · 실행
소스 코드가 실행되기까지
"내가 쓴 글자"가 "돌아가는 프로그램"이 되는 두 단계예요.

지난 장에서 자바는 두 단계로 실행된다고 했어요. 이번엔 그 과정을 실제 명령어와 함께 봅니다. 우리가 만든 소스 파일 HelloWorld.java가 실행되기까지는 이렇게 흘러가요.

📝
HelloWorld.java
사람이 쓴 자바 소스 코드
⚙️
javac (컴파일)
소스를 바이트코드로 번역
📦
HelloWorld.class
바이트코드 (실행용 파일)
🖥️
java (JVM 실행)
바이트코드를 실제로 실행
🔍 두 단계 자세히 보기 ① 컴파일 (javac) — "번역"
우리가 쓴 HelloWorld.java(사람 글자)를 컴파일러 javac바이트코드로 번역해요. 그 결과로 HelloWorld.class 파일이 생겨요. 이때 문법 오류가 있으면 여기서 걸러져요(컴파일 에러).
② 실행 (java) — "돌리기"
만들어진 HelloWorld.class(바이트코드)를 java 명령으로 실행하면, JVM이 그 바이트코드를 읽어 실제로 프로그램을 돌려요. 한마디로 javac는 "번역기", java는 "실행기"예요. 번역(javac) 없이는 실행(java)할 수 없어요.

터미널(명령 프롬프트)에서 직접 하면 이렇게 두 줄이에요. (요즘은 IDE가 이걸 버튼 하나로 대신 해 줘요. 하지만 속에서 무슨 일이 일어나는지 아는 게 중요합니다.)

🔤
용어 — 터미널·콘솔(Terminal · Console)은 마우스 클릭 대신 글자 명령을 직접 입력해서 컴퓨터에 일을 시키는 화면이에요. 윈도우에서는 명령 프롬프트(cmd)PowerShell, 맥에서는 터미널 앱이 그 역할을 해요. 아래의 javac·java 같은 명령도 여기에 입력하고, System.out.println의 출력도 이 화면에 찍혀요.
// ① 컴파일 — HelloWorld.java 를 번역 → HelloWorld.class 생성
javac HelloWorld.java

// ② 실행 — HelloWorld 를 JVM으로 실행 (확장자 .class 는 붙이지 않음)
java HelloWorld
⚠️
자주 하는 실수. 실행할 때는 java HelloWorld.class가 아니라 java HelloWorld처럼 확장자 없이 써요. 반대로 컴파일할 때는 javac HelloWorld.java처럼 .java 확장자를 붙여야 해요. 헷갈리기 쉬우니 기억해 두세요.
구분확장자정체누가 읽나
소스 파일.java사람이 쓴 자바 코드(글자)사람 · 컴파일러
바이트코드.class컴파일된 실행용 코드JVM
💡
딱 한 줄 요약. .java —(javac 컴파일)→ .class —(java 실행 = JVM)→ 프로그램이 돌아감.
👋
Hello World
첫 프로그램을 한 줄씩 해부해요
모든 프로그래머의 첫걸음. 짧지만 자바의 뼈대가 다 들어 있어요.

전통적으로 프로그래밍의 첫 프로그램은 화면에 "Hello, World!"를 찍는 거예요. 아래가 자바로 쓴 그 프로그램이에요. 지금은 통째로 이해할 필요 없어요 — 한 줄씩 천천히 풀어 갈게요.

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

실행하면 화면에 딱 이 한 줄이 나와요.

Hello, World!

자, 이제 위에서부터 한 조각씩 뜯어봅시다. 처음엔 낯선 단어가 많지만, "이건 이런 역할을 하는구나" 정도만 잡으면 충분해요. 각 키워드의 깊은 뜻은 다음 챕터들에서 하나씩 배워요.

public class HelloWorld — 클래스 선언 자바의 모든 코드는 클래스(class)라는 상자 안에 담겨요. 여기서는 HelloWorld라는 이름의 클래스를 만든 거예요. public은 "어디서든 접근 가능"이라는 뜻인데, 지금은 습관처럼 붙는 표시 정도로만 알아 두세요. 🔑 중요한 규칙: public class의 이름과 파일 이름이 반드시 같아야 해요. 클래스가 HelloWorld라면, 파일은 반드시 HelloWorld.java여야 합니다. 이름이 다르면 컴파일 에러가 나요.
🔤
용어 — 메서드(method)특정 일을 하는 코드 묶음에 이름을 붙여 둔 것이에요. 아래 main도 메서드의 하나로, "프로그램을 시작하는 일"을 맡아요. 메서드는 CH 이후에 본격적으로 배우니, 지금은 "이름 붙은 코드 덩어리" 정도로만 알아 두면 충분해요.
public static void main(String[] args) — 시작점(main 메서드) 프로그램을 실행하면 자바는 딱 이 main 메서드부터 코드를 실행하기 시작해요. 그래서 main"프로그램의 출입구(시작점)"라고 불러요. 이 한 줄은 정해진 형태(시그니처)통째로 외워 두는 게 편해요. 각 단어를 가볍게만 짚어 볼게요.
public — JVM이 밖에서 이 메서드를 불러 실행해야 하니 "열려" 있어야 해요.
static — 객체를 따로 만들지 않아도 바로 실행할 수 있게 해 줘요.
void — 이 메서드가 돌려주는 값이 없다는 표시예요.
main — 시작점의 약속된 이름. 반드시 main이어야 JVM이 찾아요.
String[] args — 실행할 때 밖에서 전달하는 추가 입력값을 받는 자리예요. 지금은 "프로그램은 main에서 시작한다""이 줄은 정해진 모양이라 그대로 쓴다" 두 가지만 챙기면 완벽해요. 세부 의미는 나중 챕터(메서드·클래스)에서 확실히 배워요.
🔤
용어 — 시그니처(Signature)는 메서드의 "정해진 생김새"를 뜻해요. 메서드 이름 + 받는 값(매개변수)의 개수·타입을 합친 모양이죠. main은 반드시 public static void main(String[] args)라는 시그니처여야 JVM이 시작점으로 알아봐요. 그래서 이 줄은 마음대로 바꾸지 말고 통째로 써 두는 거예요.
System.out.println("Hello, World!") — 화면 출력 화면(콘솔)에 글자를 한 줄 출력하는 명령이에요. System.out은 "표준 출력(화면)"을 가리키고, println"print line"출력하고 줄을 바꿔라는 뜻이에요. 큰따옴표 "..." 안에 넣은 글자가 그대로 화면에 나와요. 💬 print vs println: println은 출력 후 줄바꿈을 하고, print줄바꿈 없이 이어서 출력해요. 아래 예시로 차이를 확인해 보세요.
System.out.print("Hello, ");   // 줄바꿈 없음
System.out.print("World!");     // 앞에 이어서 출력
System.out.println();            // 여기서 줄바꿈

System.out.println("A");         // 출력 후 줄바꿈
System.out.println("B");         // 다음 줄에 출력

위 코드의 실행 결과는 이렇게 나와요.

Hello, World!
A
B
④ 세미콜론 ; 과 중괄호 { } 세미콜론 ; — 하나의 문장(명령)이 끝났다는 마침표예요. 자바에서 실행 문장 끝에는 반드시 ;를 붙여요. 빠뜨리면 컴파일 에러가 나요(입문자가 가장 많이 겪는 실수예요!).
중괄호 { } — 코드의 범위(블록)를 묶어요. 클래스의 몸통도 { }, main 메서드의 몸통도 { }로 감싸요. 여는 { 가 있으면 반드시 짝이 되는 닫는 } 가 있어야 해요. ✍️ 들여쓰기는 문법 규칙은 아니지만(파이썬과 달리), 블록 안쪽을 한 칸씩 밀어 쓰면 어디부터 어디까지가 한 덩어리인지 눈에 잘 보여요. 습관 들이면 코드가 훨씬 읽기 쉬워집니다.
⚠️
대소문자를 구분해요! 자바는 Systemsystem다른 것으로 봐요. System.out.println은 대소문자까지 정확히 써야 동작해요. Println이나 system처럼 쓰면 에러가 납니다.
☕ 번외 — 왜 "Hello, World!"부터 시작할까?
1978년 유명한 프로그래밍 책 《The C Programming Language》에서 첫 예제로 화면에 "hello, world"를 찍은 게 시초예요. 그 뒤로 거의 모든 언어가 첫 예제로 이 관례를 따라 왔어요. 왜 이걸로 시작하나 가장 짧은 코드로 "내 개발 환경이 제대로 동작하는지"를 확인할 수 있기 때문이에요. Hello World가 화면에 뜬다면 = JDK 설치·컴파일·실행이 모두 정상이라는 뜻. 그래서 첫 프로그램으로 딱이에요.
💬
주석
사람에게 남기는 메모, 주석
컴퓨터는 무시하고, 사람만 읽는 설명이에요.

주석(comment)은 코드에 남기는 메모예요. 자바가 실행할 때 주석은 완전히 무시해요 — 오직 사람이 읽으라고 적는 설명이에요. 자바에는 주석을 다는 방법이 세 가지 있어요.

// ① 한 줄 주석 — 이 줄 끝까지 설명 (가장 많이 씀)
int age = 20;   // 코드 뒤에 붙여 쓸 수도 있어요

/*
   ② 여러 줄 주석
   여러 줄에 걸쳐 설명할 때 써요.
   /* 로 열고 */ /* 로 닫아요.
*/

/**
 * ③ 문서 주석 (Javadoc)
 * 클래스나 메서드 위에 붙여, 나중에 설명 문서를 자동으로 만들 때 써요.
 */
public class Sample {
}
기호이름언제 쓰나
//한 줄 주석한 줄짜리 짧은 설명. 코드 옆에 붙이기도 해요. 가장 자주 씀.
/* ... */여러 줄 주석여러 줄에 걸친 설명. 여는 /*와 닫는 */가 짝이에요.
/** ... */문서 주석 (Javadoc)클래스·메서드 설명용. 나중에 설명 문서를 자동 생성할 수 있어요.
🤔 주석을 왜 쓸까? 1. 나중의 나를 위해 — 며칠만 지나도 "내가 이 코드를 왜 이렇게 짰지?" 싶어요. 주석을 남기면 미래의 내가 고마워해요.
2. 같이 일하는 사람을 위해 — 팀원이 내 코드를 빠르게 이해하도록 도와줘요.
3. 잠깐 코드를 꺼둘 때 — 실행하고 싶지 않은 코드를 지우지 않고 주석 처리해서 잠시 비활성화할 수 있어요. 단, 주석은 "왜(why)"를 설명할 때 가장 값져요. 코드만 봐도 뻔한 내용을 굳이 다 적을 필요는 없어요. 적당히, 필요한 곳에 남기는 게 좋아요.
🧰
주석 처리 단축키. IDE에서는 코드를 선택하고 Ctrl + / (맥은 Cmd + /)를 누르면 한 줄 주석이 토글돼요. 실습할 때 아주 자주 쓰게 될 거예요.
🧠 이 장 핵심 요약
📝
문제풀이 · 점검
배운 걸 가볍게 점검해봐요
시험이 아니라 "내가 이해했나" 확인용이에요. 틀려도 바로 해설이 나와요.
🧪
문제를 풀면 즉시 정답과 해설이 나오고, 위쪽 바에 점수가 쌓여요. 네 가지 유형(객관식 · O/X · 빈칸 · 코드결과)을 섞어 두었어요. 편하게 눌러보세요.
CH 03 📦 변수와 자료형 — 데이터를 담는 상자, 그리고 종류들