기초
5단원 · 시작·변수·연산자·제어문·메서드
01. Java 시작하기
기초 · 선수: 없음
Java 는 1995년 발표 이후 30년째 산업 현장의 주력 언어로 쓰이는 정적 타입·객체지향 프로그래밍 언어입니다. 이번 편에서는 JDK 21 LTS 를 설치하고, IDE 를 정한 뒤, 첫 번째 프로그램을 컴파일·실행해 봅니다.
02. 변수와 타입
기초 · 선수: 이전 단원
변수는 데이터를 담는 "이름표가 붙은 상자" 입니다. Java 는 **정적 타입(static type)** 언어라서 변수마다 어떤 타입의 값을 담을지 선언 시점에 미리 정해야 합니다. 이 단원에서는 Java 의 기본(primitive) 8가지와 형변환, JDK 10+ 의 `var` 키워드를 살펴봅니다.
03. 연산자와 표현식
기초 · 선수: 이전 단원
연산자는 값(피연산자)을 받아 새로운 값을 만드는 기호입니다. Java 의 연산자는 C/C++ 에서 유래해 익숙한 모양이지만, **객체 비교(`==` vs `.equals()`)** 와 **정수/실수 나눗셈** 같은 함정이 있습니다. 이 단원에서 정리합니다.
04. 제어문
기초 · 선수: 이전 단원
코드의 흐름을 갈라거나 반복할 때 쓰는 문장이 **제어문(control flow)** 입니다. Java 의 제어문은 C 와 닮았지만, JDK 14+ 의 **switch expression** 처럼 모던한 형태도 함께 사용합니다.
05. 메서드
기초 · 선수: 이전 단원
메서드는 "이름이 붙은 코드 한 묶음" 입니다. 같은 일을 여러 번 해야 할 때 메서드로 분리하면 가독성과 재사용성이 동시에 좋아집니다. 이 단원에서는 메서드의 선언법, 오버로딩, `static` 의 의미, 가변 인자(`...`) 를 다룹니다.
객체지향
5단원 · 클래스·캡슐화·상속·다형성·인터페이스
06. 클래스와 객체
객체지향 · 선수: 이전 단원
Java 는 객체지향(OOP) 언어입니다. 데이터를 **클래스(class)** 로 정의하고, 그 청사진에서 **객체(object, 인스턴스)** 를 찍어 사용합니다. 이 단원에서는 클래스를 정의하고, 객체를 만들어 필드와 메서드를 다루는 가장 기본적인 흐름을 봅니다.
07. 캡슐화
객체지향 · 선수: 이전 단원
캡슐화(encapsulation) 는 객체의 **상태(필드)** 를 외부로부터 숨기고, 정해진 메서드(getter/setter, 또는 도메인 메서드) 로만 접근하게 만드는 OOP 원칙입니다. 이를 통해 잘못된 값으로 객체가 깨지는 것을 막고, 내부 구현을 자유롭게 바꿀 수 있는 여지가 생깁니다.
08. 상속
객체지향 · 선수: 이전 단원
상속(inheritance) 은 기존 클래스의 필드·메서드를 **물려받아** 새로운 클래스를 정의하는 OOP 메커니즘입니다. 부모(super) 가 정해 놓은 공통 동작을 자식(sub) 에서 그대로 쓰거나 일부만 재정의(`@Override`) 할 수 있어 코드 중복을 줄여 줍니다.
09. 다형성
객체지향 · 선수: 이전 단원
다형성(polymorphism) 은 같은 메시지(메서드 호출) 가 객체 종류에 따라 다른 동작을 하도록 만드는 OOP 의 핵심입니다. 부모 타입 변수에 다양한 자식 객체를 담아 두고, 호출 시점에 알맞은 구현이 자동 선택됩니다.
10. 인터페이스
객체지향 · 선수: 이전 단원
인터페이스(interface) 는 클래스가 "무엇을 할 수 있는지" 만 정한 **계약(contract)** 입니다. Java 의 클래스는 한 부모만 상속할 수 있지만, **인터페이스는 여러 개 구현(`implements`)** 할 수 있어 행위 조합이 자유롭습니다.
컬렉션 · 제네릭
4단원 · 배열·List/Set/Map·제네릭·Stream
11. 배열
컬렉션 · 제네릭 · 선수: 이전 단원
배열(array) 은 같은 타입 값을 **연속된 인덱스** 로 접근하는 가장 기본적인 자료구조입니다. 크기가 한 번 정해지면 바꿀 수 없지만(고정 크기) 속도가 빠르고 메모리 효율도 좋습니다.
12. List · Set · Map
컬렉션 · 제네릭 · 선수: 이전 단원
배열은 크기가 고정이지만 실무에서는 **추가/삭제가 자유로운 컬렉션** 을 더 자주 사용합니다. 가장 많이 쓰이는 세 가지는 `List`, `Set`, `Map` 입니다.
13. 제네릭
컬렉션 · 제네릭 · 선수: 이전 단원
제네릭(generic) 은 "어떤 타입을 다룰지" 를 **클래스/메서드 정의 시점에 미루는** 메커니즘입니다. `List<String>` 의 꺾쇠가 바로 그 자리 표시자입니다. 컴파일 시점에 타입을 강제해 안전하고, 다양한 타입을 다룰 수 있어 재사용성도 높습니다.
14. Stream API
컬렉션 · 제네릭 · 선수: 이전 단원
Stream API 는 컬렉션을 **선언적으로** 변형·필터·집계하는 도구입니다. `for` 반복문 + 임시 변수 코드를 한 줄짜리 파이프라인으로 바꿔주어 의도가 한눈에 드러납니다.
예외 · 입출력
3단원 · 예외처리·파일 IO·문자열 처리
15. 예외처리
예외 · 입출력 · 선수: 이전 단원
프로그램이 실행 중 만나는 비정상 상황(파일 없음·잘못된 입력·네트워크 장애 등) 을 안전하게 다루는 메커니즘이 **예외(exception) 처리** 입니다. Java 는 try/catch/finally 와 checked/unchecked 라는 두 종류의 예외 체계를 제공합니다.
16. 파일 IO
예외 · 입출력 · 선수: 이전 단원
파일을 읽고 쓰는 것은 거의 모든 프로그램이 필요로 하는 기능입니다. Java 의 신형 IO API 인 `java.nio.file` 의 `Files`, `Path` 를 중심으로, 자원 누수를 막는 **try-with-resources** 패턴까지 배웁니다.
17. 문자열 처리
예외 · 입출력 · 선수: 이전 단원
문자열(`String`) 은 어떤 프로그램에서도 빠지지 않는 자료형입니다. Java 의 `String` 은 **불변(immutable)** 이며, 변경이 잦은 경우엔 `StringBuilder` 를 함께 사용합니다. 검색·치환에는 정규식(`Pattern`/`Matcher`) 이 강력한 도구입니다.
모던 자바
5단원 · 람다·Optional·Date/Time·Maven/Gradle·JUnit
18. 람다와 함수형
모던 자바 · 선수: 이전 단원
람다(lambda) 는 짧게 표현하는 **익명 함수** 입니다. JDK 8 이후 컬렉션·Stream·Spring 등 거의 모든 곳에서 만나는 핵심 문법입니다. 메서드 참조와 표준 함수형 인터페이스(`Function`/`Predicate`/`Consumer`/`Supplier`) 도 함께 익혀 둡니다.
19. Optional
모던 자바 · 선수: 이전 단원
`Optional<T>` 은 "값이 있을 수도, 없을 수도 있다" 는 의미를 **타입** 으로 명시하는 컨테이너입니다. 반환값이 null 일 수 있는 메서드에 사용하면 호출자가 null 체크를 잊지 못하게 강제할 수 있어 NPE 를 줄여 줍니다.
20. Date · Time
모던 자바 · 선수: 이전 단원
날짜·시간을 다루는 표준 API 는 JDK 8 부터 `java.time` 패키지로 대대적으로 개편되었습니다. 불변 객체, 명확한 의미, 시간대 처리까지 갖춰 이전의 `Date`/`Calendar` 보다 압도적으로 사용하기 쉽습니다.
21. Maven · Gradle
모던 자바 · 선수: 이전 단원
지금까지는 `.java` 파일 한두 개를 직접 `javac` / `java` 로 다뤘습니다. 실무는 **빌드 도구** 가 의존성·컴파일·테스트·배포까지 자동화합니다. Java 진영의 양대 빌드 도구가 **Maven** 과 **Gradle** 입니다.
22. JUnit 테스트
모던 자바 · 선수: 이전 단원
코드를 "잘 동작한다" 고 말하려면 **검증** 이 필요합니다. JUnit 5 는 Java 의 사실상 표준 테스트 프레임워크로, 짧고 명확한 어노테이션 기반 API 를 제공합니다.
Spring Boot
4단원 · 시작·REST·서비스 레이어·JPA
23. Spring Boot 시작
Spring Boot · 선수: 이전 단원
Spring Boot 는 "설정보다 관습(convention over configuration)" 철학으로 **수십 줄짜리 XML 없이도 즉시 실행 가능한 웹 애플리케이션** 을 만들어 주는 프레임워크입니다. 내장 Tomcat 까지 포함해 `java -jar` 한 줄로 서버가 뜹니다.
24. REST 컨트롤러
Spring Boot · 선수: 이전 단원
REST API 는 HTTP 의 메서드(`GET` / `POST` / `PUT` / `DELETE`) 와 URL 만으로 자원을 다루는 약속입니다. Spring Boot 에서는 `@RestController` 와 다양한 매핑 어노테이션으로 매우 간결하게 구현할 수 있습니다.
25. 서비스와 레이어
Spring Boot · 선수: 이전 단원
작은 예제에서는 컨트롤러 한 클래스에 모든 로직을 두어도 괜찮지만, 규모가 커지면 **계층 분리** 가 유지보수에 결정적입니다. Spring 진영의 관습적인 3 계층 구조와, 그 사이에서 안전하게 데이터를 전달하는 **DTO** 개념을 익힙니다.
26. 데이터 저장
Spring Boot · 선수: 이전 단원
지금까지는 인메모리 `Map` 으로만 데이터를 다뤘습니다. 이제 **Spring Data JPA** 와 **H2 인메모리 DB** 를 사용해 **재시작해도 같은 형태로 동작하는 영속화 계층** 을 만듭니다. JPA 는 Java 객체와 SQL 사이의 매핑을 자동화하는 ORM 표준입니다.