기존 정리내용을 복사해서 프롬프트에게 이하같이 요구함.
이 내용속에서 커리큘럼을 순서에 맞게 만들어줘
F-lab 1주차 자료에서 다룬 모든 토픽을 "선수지식 → 응용" 순서로 재배열한 학습 경로.
책의 페이지 순서가 아니라 개념 의존성을 기준으로 정렬했다.
각 Unit은 9-섹션 마스터 프롬프트로 깊이 학습할 수 있는 단위다.
[Phase 1] OOP 기초 패러다임
↓
[Phase 2] 클래스 문법과 객체간 관계
↓
[Phase 3] SOLID — OOP를 망가뜨리지 않는 5계명
↓
[Phase 4] JVM 메모리 모델 ─────┐
↓ │
[Phase 5] GC 깊이 파기 │ (메모리 이해 기반)
↓ │
[Phase 6] 데이터 다루기 (문자열·컬렉션) ◄┘
↓
[Phase 7] 외부 세계와의 통신 (I/O·직렬화)
총 7 Phase × 25 Unit — 각 Unit은 30분~1시간 분량.
| Day | Phase | 학습 목표 |
|---|---|---|
| 1일차 | Phase 1 + 2 | OOP 패러다임과 클래스 문법 끝내기 |
| 2일차 | Phase 3 | SOLID 5원칙 코드 레벨로 체화 |
| 3일차 | Phase 4 | JVM 메모리 모델·Pass by value 정복 |
| 4일차 | Phase 5 | GC 알고리즘과 GC 종류 정리 |
| 5일차 | Phase 6 (전반) | String, StringBuilder, ArrayList vs LinkedList |
| 6일차 | Phase 6 (후반) | HashMap, TreeMap, 가변인자 |
| 7일차 | Phase 7 | I/O, NIO, Serializable, transient |
목표: "왜 자바는 객체지향인가" 라는 질문에 직접 대답할 수 있게 된다.
선수 지식: 없음 (출발점)
핵심 개념
자기 점검
원본 자료: 자바의신 1, p.27
선수 지식: Unit 1.1
핵심 개념
자기 점검
원본 자료: 자바의신 1, p.35
목표: 클래스 작성 → 상속 → 다형성으로 이어지는 OOP의 3대 축을 손에 익힌다.
선수 지식: Unit 1.2
핵심 개념
[접근제어자] [반환타입] 메서드명(매개변수)return 예약어 사용자기 점검
void 반환 타입의 메서드에서 return을 쓸 수 있는가?원본 자료: 자바의신 1, p.35
선수 지식: Unit 2.1
핵심 개념
타입... 변수명 으로 선언자기 점검
void log(String... args) 와 void log(String[] args) 의 차이는?원본 자료: 자바의신 1, p.251
선수 지식: Unit 2.1
핵심 개념
extends로 부모 클래스의 필드/메서드 상속super())super(...) 호출 필요자기 점검
super를 안 쓰면 무슨 일이 일어나는가?원본 자료: 자바의신 1, p.301
선수 지식: Unit 2.3
핵심 개념
자기 점검
Animal a = new Dog(); a.eat(); 에서 호출되는 eat()은 누구 것인가?원본 자료: 자바의신 1, p.317
선수 지식: Unit 2.4
핵심 개념
instanceof로 실제 타입 확인if (a instanceof Dog d) { d.bark(); }자기 점검
instanceof 검사가 필요한가?Object instanceof String 이 false일 수 있는 경우는?원본 자료: 자바의신 1, p.315
선수 지식: Unit 2.4
핵심 개념
자기 점검
원본 자료: 자바의신 1, p.530, p.535
목표: OOP 문법은 알지만 "잘 짠 코드"가 무엇인지 모르는 단계에서, 변경에 강한 코드의 5가지 규칙을 체득한다.
선수 지식: Phase 2 전체
핵심 개념
User / UserRepository / EmailService자기 점검
선수 지식: Unit 3.1, 인터페이스 개념
핵심 개념
자기 점검
if (type.equals("VIP")) 같은 코드는 왜 OCP 위반인가?선수 지식: Unit 2.4, Unit 3.2
핵심 개념
Penguin extends Bird 에서 fly()를 막으면 LSP 위반자기 점검
UnsupportedOperationException을 던지면 왜 안 되는가?선수 지식: Unit 3.3
핵심 개념
Worker { work(); eat(); } → Robot에는 eat() 불필요Workable과 Eatable로 분리자기 점검
선수 지식: Unit 3.4
핵심 개념
Computer가 new Keyboard() 를 직접 만들면 ❌InputDevice 인터페이스에 의존, 외부에서 주입(DI)자기 점검
목표: 객체가 어디에 어떻게 저장되는지를 본 다음, "Pass by value의 진실"을 이해한다.
선수 지식: Phase 1, 2
핵심 개념
new로 만든 것)자기 점검
Member m = new Member() 에서 m은 어디에, 객체 본체는 어디에 저장되는가?원본 자료: 자바의신 1, p.83 (JVM 구조)
선수 지식: Unit 4.1
핵심 개념
new로 재할당하면 호출자에 영향 없음자기 점검
b = "z" 를 하면 왜 호출자에 영향이 없는가?원본 자료: 자바의신 1, p.246
목표: GC의 동작 원리·알고리즘·종류를 이해해서 운영 환경에서 GC를 선택·튜닝할 수 있다.
선수 지식: Unit 4.1
핵심 개념
자기 점검
원본 자료: 자바의신 1, p.83
선수 지식: Unit 5.1
핵심 개념
자기 점검
선수 지식: Unit 5.2
핵심 개념
| 알고리즘 | 핵심 | 단점 |
|---|---|---|
| Reference Counting | 참조 카운트 0이면 회수 | 순환 참조 시 메모리 누수 |
| Mark-and-Sweep | Root에서 추적해 마킹 후 비마킹 객체 제거 | Compaction 없어서 단편화 |
| Mark-and-Compact | Sweep 후 살아남은 객체를 모음 | Compact 오버헤드 |
| Generational (실제 사용) | Young/Old 분리 관리 | 구조 복잡 |
자기 점검
선수 지식: Unit 5.3
핵심 개념
| GC | 등장 | 특징 | 적합 환경 |
|---|---|---|---|
| Serial GC | 초기 | 싱글 스레드 | CPU 1개, 작은 메모리 |
| Parallel GC | Java 7~8 default | 멀티 스레드 GC | 처리량 우선 |
| CMS | (Java 9 deprecated) | STW 최소화 | 응답성 중요 |
| G1 GC | Java 9+ default | Region 단위 | 대부분의 서버 |
| Z GC | Java 11+ | STW 10ms 이하 | 초저지연 |
터미널에서 내 GC 확인
java -XX:+PrintCommandLineFlags -version
자기 점검
목표: 자바에서 데이터를 보관·조작하는 자료구조를 용도에 맞게 선택할 수 있다.
선수 지식: Unit 4.1
핵심 개념
"hello" 는 String Constant Pool 에 저장a == b 가 true가 됨)new String("hello") 는 강제로 Heap에 새 객체 생성자기 점검
String a = "abc"; String b = new String("abc"); a.equals(b) 와 a == b 의 결과는?원본 자료: 자바의신 1, p.483
선수 지식: Unit 6.1
핵심 개념
append() 는 새 객체를 만들지 않음, 메서드 체이닝 가능자기 점검
String + String + ... 을 100만 번 반복하면 무슨 일이?원본 자료: 자바의신 1, p.483
선수 지식: Unit 6.1, 배열 개념
핵심 개념
| 작업 | ArrayList | LinkedList |
|---|---|---|
get(i) | O(1) | O(n) |
| 끝에 add | O(1) 평균 | O(1) |
| 중간 add/remove | O(n) | O(1) (위치 알 때) |
| 메모리 | 적음 | 많음 (prev/next 포인터) |
자기 점검
원본 자료: 자바의신 2, p.109
선수 지식: Unit 6.3, 해시 함수 개념
핵심 개념
자기 점검
equals()만 재정의하면?원본 자료: 자바의신 2, p.104
선수 지식: Unit 6.4
핵심 개념
put, get, remove 모두 O(log n) (HashMap의 O(1)보다 느림)Comparable 구현 또는 Comparator 제공 필수자기 점검
원본 자료: 자바의신 2, p.132
목표: 파일, 네트워크와 데이터를 주고받는 추상화와 직렬화의 보안 함정까지 이해한다.
선수 지식: Phase 2 (예외 개념 필요)
핵심 개념
try (Resource r = ...) { } → 자동 closeAutoCloseable 인터페이스 구현 필요자기 점검
원본 자료: 자바의신 2, p.211
선수 지식: Unit 7.1
핵심 개념
java.io.File: 객체 생성 필요, 예외 정보 빈약 (delete()가 false만 반환)java.nio.file.Files: 모든 메서드가 static, 정확한 예외 throwPath로 파일 경로 표현자기 점검
File.delete() 가 false를 반환했을 때 이유를 알 수 있는가?Files.delete(path) 가 던지는 예외에는 무엇이 있는가?원본 자료: 자바의신 2, p.191
선수 지식: Unit 7.2
핵심 개념
자기 점검
원본 자료: 자바의신 2, p.230
선수 지식: Phase 2
핵심 개념
Serializable 구현 → 객체를 바이트 스트림으로 변환 가능serialVersionUID 명시 필수 (안 하면 클래스 변경 시 역직렬화 깨짐)transient: 직렬화에서 제외할 필드자기 점검
serialVersionUID 를 명시 안 하면 언제 문제가 터지는가?원본 자료: 자바의신 2, p.230
각 질문에 막힘없이 답할 수 있다면 1주차는 합격이다.
super(...) 를 명시적으로 호출해야 하는 경우는?Member m = new Member() 에서 m과 객체 본체는 각각 어디에 저장되는가?String a = "abc"; String b = "abc"; 일 때 a == b 가 true인 이유는?File보다 Files/Path 를 권장하는 두 가지 이유는?이 커리큘럼의 각 Unit은 9-섹션 마스터 프롬프트(세상 속 비유 → 탄생 배경 → 없으면 생기는 문제 → 해결책 → 내부 동작 → 실전 코드 → 주의사항 → 연관 개념 → 핵심 요약)로 확장 학습 가능하다.
특히 다음 Unit은 반드시 9-섹션으로 깊이 파는 걸 추천한다.
[ ] Phase 1 — OOP 기초 패러다임 (Unit 1.1~1.2)
[ ] Phase 2 — 클래스 문법과 객체간 관계 (Unit 2.1~2.6)
[ ] Phase 3 — SOLID 5원칙 (Unit 3.1~3.5)
[ ] Phase 4 — JVM 메모리 모델 (Unit 4.1~4.2)
[ ] Phase 5 — GC 깊이 파기 (Unit 5.1~5.4)
[ ] Phase 6 — 데이터 다루기 (Unit 6.1~6.5)
[ ] Phase 7 — 외부 세계와의 통신 (Unit 7.1~7.4)
[ ] 종합 자기 점검 24문항 통과
각 Phase가 실무에서 만나는 지점을 미리 정리하면 학습 동기가 유지된다.
| Phase | ILIC 실무 연결 |
|---|---|
| 3 (SOLID) | Service / Repository 분리, Strategy 패턴, Spring DI |
| 4 (JVM) | 운영 서버 heap 사이즈 결정, OOM 분석 |
| 5 (GC) | GC 로그 분석, 응답 지연 트러블슈팅 |
| 6 (Collections) | DTO 매핑, 캐시 자료구조 선택 |
| 7 (I/O, Serialization) | 파일 업로드, Redis 세션, JPA Entity 직렬화 |