본문으로 건너뛰기
Java 기초집LESSON 01

Java와 JVM의 역할: 왜 한 번 작성한 코드가 여러 환경에서 실행될까?

난이도입문 → 초급
예상 시간35분
선수지식다른 언어의 기초 문법과 Windows PowerShell

1강. Java와 JVM의 역할: 왜 한 번 작성한 코드가 여러 환경에서 실행될까?

1. 이번 강의에서 해결할 문제

Java를 운영체제와 무관한 언어라고만 외우면 javac와 java가 각각 무엇을 만들고 실행하는지 이해하기 어렵습니다. 소스에서 JVM 실행까지의 단계를 분리해야 합니다.

2. 학습 목표

3. 핵심 개념

JDK는 컴파일러 javac, 실행기 java와 개발 도구를 포함합니다. JVM은 바이트코드를 로드·검증·실행하며 운영체제별 JVM 구현이 플랫폼 차이를 흡수합니다. JRE는 JVM과 실행 라이브러리를 묶은 실행 환경을 뜻하지만, 현대 JDK 배포에서는 별도 JRE 설치보다 JDK 또는 애플리케이션별 런타임 이미지를 사용하는 흐름이 일반적입니다.

4. 단계별 실습

1. src/RuntimeInfo.java 작성

실행 환경: 코드 편집기

실행 위치: C:\dev\game-records

실행 전 확인: 같은 이름의 기존 파일이 있다면 덮어쓰기 전에 Git diff와 이번 강의 변경 범위를 확인합니다.

대상 파일: src/RuntimeInfo.java

src/RuntimeInfo.java
public class RuntimeInfo {
public static void main(String[] args) {
System.out.println("Java: " + System.getProperty("java.version"));
System.out.println("JVM: " + System.getProperty("java.vm.name"));
System.out.println("OS: " + System.getProperty("os.name"));
}
}

2. PowerShell에서 컴파일·실행

실행 환경: Windows PowerShell

실행 위치: C:\dev\game-records

실행 전 확인: java -versionjavac -version이 선택한 LTS JDK를 가리키고, 소스 파일명이 public 클래스명과 일치하는지 확인합니다.

대상: 이 강의의 .java 파일, out의 class 파일과 명시된 출력 파일

Windows PowerShell
New-Item -ItemType Directory -Force C:\dev\game-records\src,C:\dev\game-records\out
Set-Location C:\dev\game-records
javac -d out .\src\RuntimeInfo.java
java -cp out RuntimeInfo

예상 결과: Java·JVM·운영체제 정보가 출력되고 out에 RuntimeInfo.class가 생성됩니다.

5. 코드가 동작하는 이유

javac는 사람이 읽는 선언을 JVM 명령인 바이트코드로 변환하고 -d out은 결과를 소스와 분리합니다. java는 지정한 classpath에서 클래스를 찾아 JVM을 시작하고 main 메서드를 호출합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

Java와 JVM의 역할: 왜 한 번 작성한 코드가 여러 환경에서 실행될까? 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“Java와 JVM의 역할: 왜 한 번 작성한 코드가 여러 환경에서 실행될까?” 코드 리뷰에서 동작 원리와 일치하는 설명은 무엇인가요?
  2. 문제 2“Java와 JVM의 역할: 왜 한 번 작성한 코드가 여러 환경에서 실행될까?”에서 ‘JDK와 JVM을 같은 것으로 부르기’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

1강. Java와 JVM의 역할: 왜 한 번 작성한 코드가 여러 환경에서 실행될까? 미완료 상태