Hello World — 클래식 & 최신 문법
Java의 전통적인 Hello World부터 Java 21의 간결한 문법까지. 엔트리포인트와 출력 방법을 마스터합니다.
STATIC LEARNING LIBRARY
200개 예제를 개별 HTML 문서로 제공합니다. 검색엔진과 공유 링크에서 각 주제를 바로 열 수 있습니다.
Java
Java의 전통적인 Hello World부터 Java 21의 간결한 문법까지. 엔트리포인트와 출력 방법을 마스터합니다.
Java 10에 추가된 지역 변수 타입 추론 var로 코드를 간결하게 작성합니다.
Maven pom.xml로 Java 프로젝트를 구성하고 의존성을 관리하는 방법입니다.
Gradle build.gradle로 Java 프로젝트를 구성합니다. Kotlin DSL도 함께 살펴봅니다.
LTS 버전 선택 기준과 표준 Maven/Gradle 디렉토리 구조를 이해합니다.
Java
Java의 원시 타입(primitive)과 래퍼 클래스(Wrapper)의 차이, 오토박싱/언박싱의 원리.
Java의 불변 String, 가변 StringBuilder, 그리고 Java 15+의 Text Block을 완전히 마스터합니다.
Java의 전통적 제어흐름과 Java 14+의 switch 표현식으로 코드를 더 안전하게 작성합니다.
불변 데이터 클래스를 위한 Record. equals, hashCode, toString, getter를 자동 생성합니다.
대수적 데이터 타입을 Java에서 구현하는 Sealed Class와 패턴 매칭.
제네릭의 타입 경계(extends, super)와 와일드카드로 유연한 API를 설계합니다.
STR."..." 문법으로 안전한 문자열 보간
Java 21에서 정식 도입된 switch 패턴 매칭. instanceof 체크와 캐스팅을 한 번에 처리하고, sealed class와 함께 사용하면 컴파일러가 모든 케이스를 검증합니다.
Java 15+의 텍스트 블록(""")으로 여러 줄 문자열을 들여쓰기 그대로 작성합니다. JSON, SQL, HTML 등 내장 문자열 작성이 훨씬 편해집니다.
원시 타입과 래퍼 클래스의 메모리 차이, ==와 equals()의 함정을 깊이 이해합니다.
오토박싱(auto-boxing)과 언박싱(unboxing)의 동작 원리와 성능 영향을 알아봅니다.
String Pool의 동작 원리와 intern() 메서드를 이해합니다.
가변 문자열 StringBuilder와 스레드 안전한 StringBuffer의 사용법입니다.
Java 21의 switch 패턴 매칭과 가드를 활용한 강력한 분기 처리입니다.
Java 16+의 instanceof 패턴 매칭으로 형변환 없이 바로 변수를 사용합니다.
향상된 for문과 Iterable 인터페이스, Iterator 패턴을 알아봅니다.
열거형에 필드, 메서드, 추상 메서드를 추가하는 고급 패턴입니다.
내장 어노테이션과 커스텀 어노테이션 정의 방법을 배웁니다.
... 문법으로 가변 개수 인자를 받는 메서드를 작성합니다.
Javadoc 주석으로 API 문서를 자동 생성하는 방법입니다.
Java 9+의 모듈 시스템으로 패키지를 캡슐화하고 의존성을 명시합니다.
var의 허용 범위와 제약사항을 정확히 이해합니다.
다차원 배열, Arrays 유틸리티, 배열 복사 방법을 다룹니다.
Java의 정규 표현식 API와 주요 패턴을 다룹니다.
Java 8+의 java.time 패키지로 날짜와 시간을 안전하게 다룹니다.
Optional의 다양한 메서드와 올바른 사용 패턴을 알아봅니다.
람다의 다양한 형태와 클로저, 효과적 final 변수를 이해합니다.
메서드 참조(::)의 네 가지 형태와 활용법을 배웁니다.
@FunctionalInterface로 커스텀 함수형 인터페이스를 정의합니다.
Java
Java 8의 람다 표현식과 java.util.function 패키지의 함수형 인터페이스를 마스터합니다.
:: 연산자로 메서드를 람다처럼 사용하고 커스텀 함수형 인터페이스를 정의합니다.
_ 와일드카드 패턴으로 패턴 매칭 간결화
타입 파라미터를 메서드 레벨에서 선언하여 재사용 가능한 유틸리티를 만듭니다.
? extends T와 ? super T의 차이, PECS 원칙을 마스터합니다.
컴파일 후 제네릭 타입 정보가 소거되는 원리와 그 영향을 이해합니다.
Function, Predicate, Consumer의 합성 메서드를 활용합니다.
Java 표준 함수형 인터페이스 4가지의 시그니처와 활용법입니다.
두 개의 인자를 받는 함수형 인터페이스를 활용합니다.
UnaryOperator, IntFunction 등 특화 인터페이스로 오토박싱을 피합니다.
실전에서 메서드 참조를 효과적으로 활용하는 패턴을 배웁니다.
Single Abstract Method 인터페이스와 람다 변환 원리를 이해합니다.
다중 인자 함수를 단일 인자 함수 체인으로 변환하는 커링 패턴입니다.
Java
Java OOP의 핵심. 캡슐화, 상속, 다형성의 실전 적용.
Java 8~9에 추가된 인터페이스의 기본 구현, 정적 메서드, private 메서드.
Java의 Enum은 단순 상수 이상입니다. 필드, 메서드, 추상 메서드, 인터페이스 구현이 가능합니다.
List/Deque 통합 인터페이스 SequencedCollection
Java 17+의 sealed 인터페이스는 구현 가능한 클래스를 permits로 제한합니다. 도메인 모델링에서 타입 안전한 계층 구조를 만들고, switch 패턴 매칭과 결합하면 강력한 타입 시스템을 구축합니다.
추상 클래스와 인터페이스의 차이점과 각각의 적절한 사용 시나리오를 비교합니다.
인터페이스의 default 메서드와 다중 구현 시 충돌 해결 방법입니다.
Java 9+의 private 인터페이스 메서드로 default 메서드의 중복을 제거합니다.
Java 17의 sealed 클래스로 상속 계층을 제한하고 패턴 매칭을 활용합니다.
record의 커스텀 생성자, 메서드, 제약사항을 알아봅니다.
열거형 상수별로 다른 동작을 정의하는 패턴입니다.
멤버 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스의 차이를 비교합니다.
익명 클래스의 사용법과 람다로 변환할 수 있는 조건을 알아봅니다.
Java의 Proxy API로 동적 프록시를 만들어 AOP 기능을 구현합니다.
불변 객체를 올바르게 설계하는 5가지 규칙을 배웁니다.
복잡한 객체 생성을 단계별로 수행하는 빌더 패턴을 구현합니다.
객체 생성 로직을 팩토리 메서드로 캡슐화하여 유연성을 높입니다.
알고리즘을 캡슐화하고 런타임에 교체할 수 있는 전략 패턴입니다.
이벤트 발행-구독 모델을 구현하는 옵저버 패턴입니다.
기존 객체에 동적으로 기능을 추가하는 데코레이터 패턴입니다.
Java
ArrayList, LinkedList, HashMap, LinkedHashMap, TreeMap, HashSet의 선택 기준과 사용법.
Optional로 null을 명시적으로 처리하고 NPE를 방지합니다.
Files.zip() 없이도 ZIP 처리하는 현대적 방법
ArrayList의 동적 배열 구현, 용량 관리, 성능 특성을 알아봅니다.
두 리스트 구현체의 성능 특성을 비교하고 적절한 선택 기준을 제시합니다.
HashMap의 해시 버킷, 트리 변환, 로드 팩터를 이해합니다.
멀티스레드 환경에서 안전한 ConcurrentHashMap의 원리와 사용법입니다.
정렬된 컬렉션 TreeMap/TreeSet의 Red-Black Tree 기반 동작입니다.
우선순위 큐의 힙(Heap) 기반 동작과 활용법입니다.
Deque를 스택과 큐로 활용하는 방법입니다.
Collections 클래스의 유용한 정적 메서드를 활용합니다.
Comparator의 팩토리 메서드와 체이닝으로 복잡한 정렬을 구현합니다.
flatMap으로 중첩 구조를 평탄화하고 groupingBy로 그룹화합니다.
Collectors의 다양한 수집 전략으로 스트림 결과를 변환합니다.
Java 9+의 팩토리 메서드로 불변 컬렉션을 생성하고 활용합니다.
Collector 인터페이스를 직접 구현하여 맞춤 수집 전략을 만듭니다.
parallelStream()의 동작 원리, 성능 주의사항, 적합한 사용 시나리오입니다.
Spliterator의 분할-순회 원리와 커스텀 구현을 알아봅니다.
Java
Java 8의 Stream API로 컬렉션을 함수형으로 처리합니다. 중간 연산과 최종 연산을 마스터합니다.
Collectors의 고급 기능과 Java 22의 Gatherers API.
Java 16+ Record와 불변 컬렉션으로 함수형 스타일의 안전한 데이터 파이프라인을 구축합니다.
네이티브 메모리를 안전하게 다루는 MemorySegment
스트림의 지연 평가(Lazy Evaluation)와 중간/최종 연산의 동작을 이해합니다.
Optional을 함수형으로 체이닝하여 null 안전한 코드를 작성합니다.
여러 함수를 합성하여 데이터 변환 파이프라인을 구축합니다.
함수형 프로그래밍 관점에서 Collector를 활용한 데이터 집계를 다룹니다.
Java 9의 Flow API로 리액티브 스트림의 기본 개념을 이해합니다.
불변 데이터 구조와 with 패턴으로 상태 변경을 안전하게 처리합니다.
순수 함수의 조건과 참조 투명성이 코드 품질에 미치는 영향을 알아봅니다.
I/O 등의 부수 효과를 순수 로직과 분리하는 전략을 배웁니다.
sealed 인터페이스와 record를 조합한 대수적 데이터 타입(ADT)과 패턴 매칭입니다.
Vavr(구 Javaslang)의 함수형 자료구조와 유틸리티를 소개합니다.
Java
Java 8의 CompletableFuture로 비동기 작업을 조합하고 체이닝합니다.
수백만 개의 경량 스레드를 생성할 수 있는 Virtual Threads로 동시성 코드를 단순화합니다.
스레드 풀로 자원을 효율적으로 관리하고 병렬 처리를 구현합니다.
ThreadLocal 대체, 코루틴 친화적 컨텍스트 전달
CompletableFuture의 고급 조합 패턴. 여러 비동기 작업을 병렬 실행하고, 타임아웃을 설정하고, 예외를 체계적으로 처리하는 실전 패턴을 익힙니다.
Java 21의 구조화된 동시성(Structured Concurrency)은 여러 하위 작업의 수명을 부모 작업에 종속시킵니다. 하나라도 실패하면 나머지를 자동 취소하여 리소스 누수를 방지합니다.
스레드 생성 방법과 Thread 상속 vs Runnable 구현의 차이입니다.
스레드 풀을 관리하는 ExecutorService의 다양한 구현과 활용법입니다.
Callable로 결과를 반환하는 비동기 작업과 Future의 한계를 이해합니다.
CompletableFuture로 비동기 파이프라인을 구성하고 결합합니다.
주기적 작업과 지연 실행을 관리하는 스케줄러입니다.
분할-정복 알고리즘을 병렬로 실행하는 Fork/Join 프레임워크입니다.
Java 21의 가상 스레드로 대규모 동시성을 저렴하게 구현합니다.
Java 21의 구조적 동시성으로 스레드 수명을 체계적으로 관리합니다.
synchronized보다 유연한 ReentrantLock의 활용법입니다.
읽기-쓰기 잠금으로 읽기 동시성을 높이는 전략입니다.
스레드 동기화 도구인 CountDownLatch와 CyclicBarrier를 비교합니다.
동적으로 참여자를 추가/제거할 수 있는 유연한 Phaser입니다.
생산자-소비자 패턴을 위한 BlockingQueue 구현체들입니다.
리액티브 스트림의 배압(backpressure) 메커니즘을 이해합니다.
SubmissionPublisher와 Processor를 사용한 데이터 변환 파이프라인입니다.
Java
Checked/Unchecked 예외, 커스텀 예외 계층, try-with-resources로 리소스를 안전하게 관리합니다.
LinkedHashMap의 SequencedMap 인터페이스 활용
checked 예외와 unchecked 예외의 차이, 설계 기준을 이해합니다.
AutoCloseable 리소스를 자동으로 정리하는 패턴의 심화 활용입니다.
여러 예외를 한 번에 잡는 multi-catch와 예외 재던지기 패턴입니다.
애플리케이션의 예외 계층을 체계적으로 설계하는 방법입니다.
도메인에 맞는 커스텀 예외를 올바르게 만드는 방법입니다.
저수준 예외를 고수준 예외로 변환하는 예외 번역 패턴입니다.
예외의 원인 체인을 활용하여 근본 원인을 추적합니다.
SLF4J 로깅 퍼사드와 Logback 구현체로 체계적인 로깅을 구현합니다.
assert 키워드와 불변조건 검사로 프로그래밍 오류를 조기에 발견합니다.
입력 검증을 체계적으로 수행하는 패턴과 에러 수집 전략입니다.
Java
Java 7+ NIO2의 Path와 Files로 파일 처리를 현대적으로 합니다.
Java 생태계의 표준 JSON 라이브러리 Jackson으로 직렬화/역직렬화를 마스터합니다.
java.nio.file API로 파일과 디렉토리를 현대적으로 다룹니다.
버퍼링된 I/O로 파일 읽기/쓰기 성능을 최적화합니다.
문자 인코딩 처리와 Charset API를 올바르게 사용합니다.
Java 직렬화의 동작 원리, 보안 위험, 대안을 알아봅니다.
Jackson 라이브러리로 JSON 직렬화/역직렬화를 수행합니다.
JDBC로 데이터베이스를 안전하고 효율적으로 다루는 방법입니다.
HikariCP를 사용한 커넥션 풀 관리와 설정 최적화입니다.
Java 11+의 내장 HTTP 클라이언트로 REST API를 호출합니다.
Java 11+의 WebSocket API로 실시간 양방향 통신을 구현합니다.
AsynchronousFileChannel로 논블로킹 파일 I/O를 수행합니다.
Java
Effective Java가 권장하는 Builder 패턴으로 복잡한 객체를 안전하게 생성합니다.
알고리즘을 캡슐화하는 Strategy와 알고리즘 골격을 정의하는 Template Method.
GoF 생성 패턴의 핵심 3가지를 현대적 Java 문법으로 구현합니다.
@Deprecated(since, forRemoval) 올바른 폐기 처리
Java 9+의 모듈 시스템(JPMS)으로 강한 캡슐화를 구현합니다. module-info.java에서 공개할 패키지와 의존성을 명시적으로 선언하여 대규모 애플리케이션의 구조를 강화합니다.
의존성 역전 원칙에 기반한 클린 아키텍처의 계층 구조와 구현입니다.
포트와 어댑터 패턴으로 외부 시스템과의 결합을 제거합니다.
전통적인 3계층 아키텍처의 구조와 의존성 흐름입니다.
Spring의 핵심 원리인 의존성 주입을 직접 구현하여 이해합니다.
횡단 관심사를 분리하는 AOP의 원리를 프록시로 구현합니다.
상태 변경을 이벤트로 기록하고 재구성하는 이벤트 소싱 패턴입니다.
명령(Command)과 조회(Query)의 책임을 분리하는 CQRS 패턴입니다.
분산 트랜잭션을 보상 트랜잭션으로 관리하는 사가 패턴입니다.
장애 전파를 차단하는 서킷 브레이커를 직접 구현합니다.
장애 격리를 위해 자원을 분할하는 벌크헤드 패턴입니다.
일시적 장애에 대응하는 재시도 로직과 지수 백오프 전략입니다.
마이크로서비스 앞단의 API 게이트웨이 역할과 구현 개념입니다.
마이크로서비스가 서로를 동적으로 찾는 서비스 디스커버리 패턴입니다.
애플리케이션 설정을 코드에서 분리하여 환경별로 관리합니다.
동기(REST)/비동기(메시지 큐) 통신과 선택 기준을 비교합니다.
Java
JUnit 5의 현대적 테스트 기능과 Mockito로 외부 의존성을 격리합니다.
Docker 컨테이너로 실제 DB/서비스를 띄워 통합 테스트를 작성합니다.
when 조건 가드로 복잡한 패턴 분기
JUnit 5의 @ParameterizedTest로 하나의 테스트 메서드를 다양한 입력 데이터로 반복 실행합니다. CSV, Enum, Method 소스 등 다양한 데이터 공급 방식을 지원합니다.
JUnit 5의 생명주기, 표시 이름, 조건부 실행을 다룹니다.
JUnit 5의 다양한 어설션 메서드와 활용법입니다.
중첩 클래스로 테스트를 계층적으로 구조화합니다.
런타임에 테스트를 동적으로 생성하는 @TestFactory입니다.
Mockito로 의존성을 모킹하고 행위를 검증하는 고급 기법입니다.
ArgumentCaptor로 메서드에 전달된 인자를 캡처하여 상세 검증합니다.
BDD 스타일로 테스트를 작성하여 가독성과 의도를 명확히 합니다.
Docker 컨테이너로 실제 인프라 통합 테스트를 수행합니다.
@SpringBootTest로 Spring 컨텍스트 기반 통합 테스트를 수행합니다.
웹 레이어만 로드하여 컨트롤러를 빠르게 테스트합니다.
Java Microbenchmark Harness로 정확한 성능 측정을 수행합니다.
ArchUnit으로 아키텍처 규칙을 코드로 검증합니다.
코드를 의도적으로 변경하여 테스트의 품질을 검증하는 뮤테이션 테스트입니다.
서비스 간 API 계약을 검증하는 Consumer-Driven Contract 테스트입니다.
전체 시스템을 관통하는 E2E 테스트의 전략과 모범 사례입니다.
Java
JVM의 Heap 구조, GC 알고리즘, 메모리 튜닝의 핵심을 이해합니다.
JMH(Java Microbenchmark Harness)로 신뢰할 수 있는 성능 측정을 합니다.
Java 22의 Foreign Function & Memory API로 네이티브 라이브러리를 안전하게 호출합니다.
파일 하나로 실행 가능한 간단한 Java 프로그램
JVM GC(가비지 컬렉터) 선택과 기본 튜닝. G1 GC(기본)와 ZGC의 특성을 이해하고, 애플리케이션 특성에 맞는 GC를 선택하여 지연시간과 처리량을 최적화합니다.
JMH로 컬렉션 성능을 비교하는 실전 벤치마크입니다.
Java Flight Recorder로 운영 환경의 성능 데이터를 수집하고 분석합니다.
GC 로그를 분석하고 적절한 가비지 컬렉터를 선택합니다.
힙 덤프를 생성하고 메모리 사용을 분석하는 방법입니다.
스레드 덤프로 데드락, 병목, 스레드 상태를 진단합니다.
Caffeine 라이브러리로 고성능 로컬 캐시를 구현합니다.
데이터베이스 커넥션 풀의 최적 크기와 모니터링 전략입니다.
JIT 컴파일러의 최적화 기법과 이스케이프 분석을 이해합니다.
문자열 처리의 성능을 개선하는 다양한 기법입니다.
컬렉션 초기 용량 설정으로 불필요한 재할당을 방지합니다.
일반적인 Java 메모리 누수 패턴과 탐지 방법입니다.
Java 애플리케이션 성능 최적화의 종합 체크리스트입니다.