콘텐츠로 이동

Java 문서

Java 프로그래밍, 메모리 관리, OOP에 관한 학습 자료입니다.


문서 목록

  • 핵심 개념


    Java 언어의 기본 문법, 객체지향 프로그래밍, 컬렉션 프레임워크

    핵심 개념

  • 메모리와 GC


    JVM 메모리 구조, 가비지 컬렉션 알고리즘, 메모리 튜닝

    메모리와 GC


Java 생태계 개요

flowchart TD
    subgraph Core["Core Java"]
        A1[OOP 원칙] --> A2[SOLID]
        A3[Collections] --> A4[Generics]
        A5[Streams] --> A6[Lambda]
    end

    subgraph Framework["프레임워크"]
        B1[Spring Boot] --> B2[Spring MVC]
        B1 --> B3[Spring Data]
        B1 --> B4[Spring Security]
    end

    subgraph Build["빌드 도구"]
        C1[Maven] 
        C2[Gradle]
    end

    subgraph Runtime["실행 환경"]
        D1[JVM] --> D2[GC]
        D1 --> D3[JIT Compiler]
    end

    Core --> Framework
    Framework --> Build
    Build --> Runtime

Java 버전 역사

버전 출시년도 주요 기능
Java 8 2014 Lambda, Stream API, Optional
Java 11 2018 LTS, var, HTTP Client
Java 17 2021 LTS, Sealed Classes, Pattern Matching
Java 21 2023 LTS, Virtual Threads, Record Patterns

JVM 메모리 구조

flowchart TB
    subgraph JVM["JVM Memory"]
        subgraph Heap["Heap (공유)"]
            Y[Young Generation] --> E[Eden]
            Y --> S1[Survivor 1]
            Y --> S2[Survivor 2]
            O[Old Generation]
        end

        subgraph NonHeap["Non-Heap"]
            M[Metaspace]
            CC[Code Cache]
        end

        subgraph Stack["Stack (스레드별)"]
            T1[Thread 1 Stack]
            T2[Thread 2 Stack]
        end
    end

    E -->|Minor GC| S1
    S1 -->|Promotion| O
    O -->|Major GC| O

OOP 4대 원칙

원칙 영문 설명 키워드
캡슐화 Encapsulation 데이터와 메서드를 하나로 묶고 외부 접근 제한 private, getter/setter
상속 Inheritance 기존 클래스의 특성을 새 클래스가 물려받음 extends, super
다형성 Polymorphism 같은 인터페이스로 다른 동작 구현 @Override, 인터페이스
추상화 Abstraction 복잡한 구현을 숨기고 필요한 기능만 노출 abstract, interface

필수 패키지

java.util

// 컬렉션 프레임워크
List<String> list = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
Set<String> set = new HashSet<>();

// Optional
Optional<String> opt = Optional.ofNullable(value);
opt.orElse("default");

java.util.stream

// Stream API
List<Integer> result = numbers.stream()
    .filter(n -> n > 0)
    .map(n -> n * 2)
    .sorted()
    .collect(Collectors.toList());

java.util.concurrent

// 동시성
ExecutorService executor = Executors.newFixedThreadPool(4);
CompletableFuture<String> future = CompletableFuture
    .supplyAsync(() -> "result")
    .thenApply(s -> s.toUpperCase());

관련 문서


참고 자료