포스트

자바 기본 개념 정리 [CS 면접 박살내기]

자바 기본 개념 정리 [CS 면접 박살내기]

Java 로고

자바 기본 개념 정리

자바를 처음 배울 때 가장 헷갈렸던 부분이 바로 JDK, JRE, JVM의 차이점이었다. 이 세 개념이 어떻게 연결되어 있는지, 그리고 자바가 왜 이렇게 널리 사용되는지 차근차근 알아보자.

자바의 핵심 철학: WORA

자바는 플랫폼 독립적인 객체지향 프로그래밍 언어다. 여기서 핵심은 “플랫폼 독립적”이라는 부분이다.

한 번 작성하면 어디서든 실행된다는 WORA(Write Once, Run Anywhere) 철학을 바탕으로, 운영체제에 관계없이 JVM(Java Virtual Machine) 위에서 실행된다. 이게 바로 자바의 가장 큰 장점이다.

그런데 이 WORA가 가능한 이유가 뭘까? 바로 자바 프로그램이 JDK, JRE, JVM 이 세 구성 요소를 통해 컴파일되고 실행되기 때문이다.

JDK, JRE, JVM의 관계

JDK, JRE, JVM 관계도

JDK (Java Development Kit) - 개발자의 도구상자

JDK는 말 그대로 개발에 필요한 도구 모음이다.

자바 코드를 작성하고 컴파일할 수 있도록 javac, java, javadoc 등의 툴이 들어있다. 자바 개발자라면 반드시 필요한 도구들이다.

흥미로운 점은 JDK 안에 JRE도 포함되어 있다는 것이다. 개발할 때는 JDK를, 실행할 때는 JRE를 따로 설치할 필요가 없어서 편리하다.

JRE (Java Runtime Environment) - 실행만을 위한 환경

JRE는 자바 프로그램을 실행하는 데 필요한 실행 환경이다.

개발은 못 하고, 실행만 가능한 환경으로, JVM과 라이브러리(Class 파일들)를 포함한다.

서버나 사용자 입장에서는 실행만 필요하므로 JRE만 있어도 충분하다. 실제로 많은 서버 환경에서는 JRE만 설치해서 자바 애플리케이션을 실행한다.

JVM (Java Virtual Machine) - 실제 실행의 핵심

JVM은 자바 프로그램이 실제로 실행되는 가상 머신이다.

.class 바이트코드 파일을 운영체제에 맞는 기계어로 해석하고 실행하는 역할을 한다.

여기서 중요한 점은 JVM은 운영체제별로 다르지만, .class 파일은 운영체제와 무관하게 동일하다는 것이다. 이게 바로 WORA가 가능한 이유다!

자바의 실행 흐름

자바 프로그램이 어떻게 실행되는지 살펴보면:

자바 실행 흐름

1
2
3
4
5
[1] Hello.java  (소스 코드)
     ↓ javac 컴파일
[2] Hello.class (바이트코드 생성)
     ↓ JVM 실행
[3] 운영체제에서 실행됨 (기계어로 변환됨)

즉, 자바는 컴파일 + 인터프리터 방식이 결합된 구조다.

.java.class컴파일 과정이고, .class 실행은 JVM이 인터프리팅 또는 JIT 컴파일하는 과정이다. 이렇게 두 단계를 거쳐서 플랫폼 독립성을 보장하는 것이다.

자바의 5가지 핵심 특징

1. Platform Independence (플랫폼 독립성)

“Write Once, Run Anywhere”라는 자바의 철학을 잘 보여주는 특징이다.

자바 프로그램은 JVM(Java Virtual Machine) 위에서 실행되기 때문에 윈도우, 리눅스 등 운영체제에 상관없이 동일한 바이트코드로 실행된다.

한번 컴파일된 자바 코드는 다양한 플랫폼에서 재컴파일 없이 동작한다. 이게 바로 자바가 엔터프라이즈 환경에서 널리 사용되는 이유다.

2. Object-Oriented (객체 지향)

자바는 순수 객체지향 언어에 가까우며, 유지보수성과 확장성이 뛰어나다.

캡슐화, 상속, 다형성 같은 객체지향 원칙을 지원해서, 모듈화되고 재사용 가능하며 유지보수 쉬운 코드를 작성할 수 있다.

대규모 프로젝트에서 코드의 복잡성을 관리하는 데 정말 유용한 특징이다.

3. Robust and Secure (강력하고 안전함)

개발자가 안정적인 프로그램을 작성할 수 있도록 여러 보장 장치를 제공한다.

가비지 컬렉션(Garbage Collection) 을 통한 자동 메모리 관리, 예외 처리(Exception Handling) 를 통한 오류 복구, 타입 안정성(Type Safety) 으로 런타임 오류 최소화 등이 대표적인 예시다.

결과적으로 신뢰성(Reliability)보안(Security) 이 향상되어, 안정적인 애플리케이션 개발이 가능해진다.

4. Multi-threading (멀티스레딩 지원)

성능과 반응성을 높이기 위한 병렬 처리 기능이다.

여러 작업을 동시에 수행할 수 있도록 하는 멀티스레드 환경을 지원한다.

예를 들어 UI 응답 처리와 백그라운드 연산을 동시에 수행할 수 있어서, 실시간성과 효율적인 리소스 활용이 가능해진다.

5. Rich Standard Library (풍부한 표준 라이브러리)

빠른 개발과 다양한 기능 구현을 돕는 강력한 내장 API다.

파일 I/O, 네트워크, 날짜/시간 처리, 컬렉션 프레임워크, GUI 개발 등 정말 다양한 기능들이 내장되어 있다.

별도의 외부 라이브러리 없이도 광범위한 기능을 손쉽게 구현 가능해서, 개발 생산성이 크게 향상된다.

마무리

자바는 플랫폼 독립성과 객체지향 특성을 기반으로, 강력하고 안전하며, 병렬 처리와 풍부한 라이브러리를 제공하여 대규모 안정적인 애플리케이션 개발에 최적화된 언어다.

핵심 포인트 정리

  • JDK: 개발도구 (javac, java 등) - 개발자용
  • JRE: 실행환경 (JVM + 라이브러리) - 실행용
  • JVM: 바이트코드 실행기 (운영체제 독립성의 핵심)

이 세 개념의 관계를 이해하면 자바의 동작 원리를 훨씬 잘 이해할 수 있을 것이다. 다음 포스트에서는 자바의 메모리 구조와 가비지 컬렉션에 대해 알아보자!


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.