[강의] Java 프로그래밍 기초

Jerry·2025년 7월 9일

Topic

Java
JDK
JRE
JVM

What I Learned

Java

정의

Sun Microsystems에서 1995년에 제임스 고슬링과 연구원들이 개발한 객체지향 프로그래밍 언어이자 플랫폼 독립적인(Write Once, Run Anywhere) 특징을 가진 언어 및 개발 환경

특징

  • 한 번 작성하면 여러 플랫폼에서 실행 가능한 WORA(Write Once, Run Anywhere) 특성
  • JVM(Java Virtual Machine)을 통해 플랫폼 독립성과 보안성을 제공
  • 웹, 모바일, 서버 등 멀티 플랫폼 프로그래밍이 가능
  • 객체 지향 설계 및 프로그래밍 활용 언어
  • 플랫폼에 독립적이어서 높은 이식성
  • 인터프리터와 컴파일러의 장점을 모두 갖춘 언어
  • 자동 메모리 관리와 예외 처리 기능 내장
  • 동적 로딩과 멀티스레딩 구현이 쉽고 효율적
  • 병행성(Concurrency)을 지원하는 다양한 기능 내장
  • 풍부한 오픈 소스 라이브러리와 프레임워크 지원
  • 보안과 신뢰성 측면에서 매우 강력
  • 기업용 애플리케이션 개발에 널리 활용되고 검증된 언어
  • 강한 형식 검사와 풍부한 API 제공으로 안정성 확보
  • 네트워크 프로그래밍에 적합하며 서버 사이드 애플리케이션에 강점

역사

  • Java 1.0 (1996) 최초 릴리즈, JVM 도입, AWT GUI, Applet 지원
  • Java 5 (2004) Generics, Enum, Annotation, Enhanced for-loop
  • Java 6 (2006) Scripting API, JDBC 4.0, Web Services 강화, 한국 Legacy Standard 버전 1
  • Java 8 (2014) LTS, Lambda, Stream API, Optional, 날짜 API 개선, 한국 Legacy Standard 버전 2(마지막 무료 Oracle JDK), 가장 유의미한 문법 변화
  • Java 11 (2018) LTS, var 지원, HttpClient, 문자열 API 강화, Open JDK 활용 시작
  • Java 17 (2021) LTS, Sealed Class, Pattern Matching, 성능 개선 필드에서 선호
  • Java 21 (2023) LTS, Virtual Thread, Record Pattern, String Template

JDK (Java Development Kit)

  • 자바 개발을 위한 전체 패키지
  • 구성 요소:
    • JRE (실행 환경)
    • JVM (가상 머신)
    • 개발 도구 (javac, javadoc, jar, 디버거 등)
    • 문서, 샘플 코드
  • 즉, 개발자는 JDK를 설치해야 하고, 단순 실행만 필요하면 JRE만으로 충분했습니다.
  • 최근(자바 11 이후): JRE는 별도로 배포하지 않고, JDK만 제공됩니다

Java SE, Standard Edition: 기본적인 Java 기능 제공 (일반 사용자)

  • 가장 기본적인 자바 플랫폼
  • 기능: 언어 문법, 기본 API(java.lang, java.util, java.io 등), JDBC, 네트워킹, GUI(Swing, JavaFX 일부)

Java EE → Jakarta EE (Enterprise Edition)

  • 현재는 Jakarta EE라는 이름으로 Eclipse 재단에서 관리됩니다.
  • 특징:
    • 대규모 기업 애플리케이션 개발에 특화
    • 웹 애플리케이션 서버 (Tomcat, WildFly, GlassFish, Payara 등)
    • 서블릿, JSP, EJB, JPA, JMS, JAX-RS 같은 사양 포함
  • 분산 처리, 트랜잭션 관리, 웹 서비스 API 지원

Java ME (Micro Edition)

  • 자원이 제한된 환경(휴대폰, IoT 기기, 임베디드 장비)을 위한 경량 자바 플랫폼
  • 2000년대 초·중반에는 피처폰 앱 개발 등에 많이 쓰였으나,
    지금은 안드로이드와 IoT 플랫폼 등장으로 사실상 사용되지 않습니다.

JRE (Java Runtime Environment)

  • JVM + 실행에 필요한 기본 클래스 라이브러리
  • 개발 도구는 포함되지 않음
  • Java 11 이후부터는 JDK만 배포되고, JRE는 따로 제공되지 않음

JVM

정의

자바 바이트코드를 운영체제에 맞게 해석하고 실행하는 가상 머신 프로그램

실행 단계

메모리 구조

  • Method Area: 클래스 별로 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드, 런타임 상수 풀 등을 저장하는 영역으로 모든 스레드가 공유
  • Heap Area: 객체와 인스턴스 변수가 저장되는 영역. GC의 관리 대상
  • Stack Area: 각 스레드마다 생성되며 메소드 호출 시 생성되는 프레임(stack frame)과 지역 변수, 매개변수 등이 저장되는 영역
  • PC(Program Counter) Register: 각 스레드마다 존재하며 현재 실행 중인 명령어의 주소를 저장하는 영역
  • Native Method Stack: C/C++ 등 네이티브 메소드를 실행할 때 필요한 정보를 저장하는 영역

JIT Compiler

  • JVM이 바이트코드를 실행할 때 사용하는 동적 컴파일 기술
  • 자주 실행되는 코드를 실행 중에 기계어로 변환하여 최적화
  • 인터프리터 언어의 단점을 어느정도 극복
  • Java 코드 실행 프로세스
    1. 인터프리터로 바이트코드를 한 줄씩 실행
    2. 반복적으로 실행되는 코드가 감지되면 JIT Compiler가 해당 코드를 기계어로 변환
    3. 이후 해당 코드는 변환된 기계어로 바로 실행

Garbage Collection

  • 프로그램 실행 중 참조가 없는 객체를 자동으로 탐지하고 메모리에서 제거하는 메모리 관리 기법
  • Mark and sweep 알고리즘을 사용

Java 환경 - Eclipse Temurin

  • OpenJDK 기반의 오픈소스 Java SE 빌드
  • 다양한 OS 플랫폼(Linux=Unix, Mac, Window, Solaris)과 Java SE 버전에 대해 제공되며 프로덕션 환경에서 사용하기에 권장되는 최신 릴리스를 제공합니다.
  • 해당 릴리스는 Adoptium 커뮤니티에 의해 정기적으로 업데이트되고 지원되며 마이그레이션 지원, 컨테이너 이미지, 패키지 설치 가이드 등도 제공된다.

Java 개발 도구 - IntelliJ IDEA

  • JetBrains에서 개발한 Java IDE(Integrated Development Environment)으로, 강력한 코드 자동완성, 디버깅, 리팩토링 기능을 제공하는 도구

To study

Reference

profile
Backend engineer

0개의 댓글