๐ฏ F-lab Java 1์ฃผ์ฐจ ํ์ต ์ปค๋ฆฌํ๋ผ
๊ธฐ์กด ์ ๋ฆฌ๋ด์ฉ์ ๋ณต์ฌํด์ ํ๋กฌํํธ์๊ฒ ์ดํ๊ฐ์ด ์๊ตฌํจ.
์ด ๋ด์ฉ์์์ ์ปค๋ฆฌํ๋ผ์ ์์์ ๋ง๊ฒ ๋ง๋ค์ด์ค
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์๊ฐ ๋ถ๋.
๐๏ธ ๊ถ์ฅ ํ์ต ์ผ์ (7์ผ ๊ธฐ์ค)
| 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 |
๐ Phase 1 โ OOP ๊ธฐ์ด ํจ๋ฌ๋ค์
๋ชฉํ: "์ ์๋ฐ๋ ๊ฐ์ฒด์งํฅ์ธ๊ฐ" ๋ผ๋ ์ง๋ฌธ์ ์ง์ ๋๋ตํ ์ ์๊ฒ ๋๋ค.
Unit 1.1 โ ์ ์ฐจ์งํฅ vs ๊ฐ์ฒด์งํฅ
์ ์ ์ง์: ์์ (์ถ๋ฐ์ )
ํต์ฌ ๊ฐ๋
- ์ ์ฐจ์งํฅ (C ์ธ์ด): ๋ฐ์ดํฐ์ ํจ์๊ฐ ๋ถ๋ฆฌ๋จ
- ๊ฐ์ฒด์งํฅ (Java): ๋ฐ์ดํฐ(์ํ)์ ํ๋(๋ฉ์๋)์ ํ๋์ ๊ฐ์ฒด๋ก ๋ฌถ์
- ํ์ค ๋ชจ๋ธ๋ง: "์๋์ฐจ์ ์๋์ ๊ฐ์"์ด ์ฝ๋์์๋ ํ ๋ฌถ์์ผ๋ก ํํ๋จ
์๊ธฐ ์ ๊ฒ
- C ๊ตฌ์กฐ์ฒด๋ก OOP๋ฅผ ํ๋ด๋ผ ์๋ ์๋๊ฐ? ๊ทธ๋ ๋ค๋ฉด ์๋ฐ์ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.27
Unit 1.2 โ ํด๋์ค์ ๊ฐ์ฒด์ ๋ณธ์ง
์ ์ ์ง์: Unit 1.1
ํต์ฌ ๊ฐ๋
- ํด๋์ค = ์ฒญ์ฌ์ง(blueprint), ๊ฐ์ฒด = ์ฒญ์ฌ์ง์ผ๋ก ์ฐ์ด๋ธ ์ค๋ฌผ
- ๋น์ : ํด๋์ค๋ ๋ถ์ด๋นต ํ, ๊ฐ์ฒด(์ธ์คํด์ค)๋ ๋ถ์ด๋นต
- ํด๋์ค๊ฐ ๊ฐ์ ธ์ผ ํ ๋ ๊ฐ์ง: ์ํ(ํ๋) ์ ํ๋(๋ฉ์๋)
์๊ธฐ ์ ๊ฒ
- "ํด๋์ค๋ ๊ฐ์ฅ ์์ ๋จ์"๋ผ๋ ๋ง์ ์๋ฏธ๋?
- ์ํ ์์ด ํ๋๋ง ์๋ ํด๋์ค๋ ์๋ฏธ๊ฐ ์์๊น?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.35
๐ Phase 2 โ ํด๋์ค ๋ฌธ๋ฒ๊ณผ ๊ฐ์ฒด๊ฐ ๊ด๊ณ
๋ชฉํ: ํด๋์ค ์์ฑ โ ์์ โ ๋คํ์ฑ์ผ๋ก ์ด์ด์ง๋ OOP์ 3๋ ์ถ์ ์์ ์ตํ๋ค.
Unit 2.1 โ ๋ฉ์๋์ ๊ตฌ์กฐ
์ ์ ์ง์: Unit 1.2
ํต์ฌ ๊ฐ๋
- ์๊ทธ๋์ฒ:
[์ ๊ทผ์ ์ด์] [๋ฐํํ์
] ๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์)
- ๋งค๊ฐ๋ณ์: ๋ฉ์๋๋ช
์ฐ์ธก ์๊ดํธ ์
- ๋ฐํ๊ฐ:
return ์์ฝ์ด ์ฌ์ฉ
์๊ธฐ ์ ๊ฒ
void ๋ฐํ ํ์
์ ๋ฉ์๋์์ return์ ์ธ ์ ์๋๊ฐ?
- ๋งค๊ฐ๋ณ์ ์๋ ๋ฉ์๋์ ์๋ ๋ฉ์๋์ ํธ์ถ ๋ฐฉ์ ์ฐจ์ด๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.35
Unit 2.2 โ ๊ฐ๋ณ์ธ์ (Varargs)
์ ์ ์ง์: Unit 2.1
ํต์ฌ ๊ฐ๋
- ๋งค๊ฐ๋ณ์ ๊ฐ์๊ฐ ๊ฐ๋ณ์ผ ๋
ํ์
... ๋ณ์๋ช
์ผ๋ก ์ ์ธ
- ๋ฉ์๋ ์์์๋ ๋ฐฐ์ด๋ก ๋ค๋ฃธ
- ์ค๋ฒ๋ก๋ฉ์ ๋์
์๊ธฐ ์ ๊ฒ
void log(String... args) ์ void log(String[] args) ์ ์ฐจ์ด๋?
- ๊ฐ๋ณ์ธ์๋ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ ์ด๋ ์์น์ ์์ผ ํ๋๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.251
Unit 2.3 โ ์์๊ณผ ์์ฑ์ ์ฒด์ด๋
์ ์ ์ง์: Unit 2.1
ํต์ฌ ๊ฐ๋
extends๋ก ๋ถ๋ชจ ํด๋์ค์ ํ๋/๋ฉ์๋ ์์
- ์์ ์์ฑ์๋ ๊ฐ์ฅ ๋จผ์ ๋ถ๋ชจ ์์ฑ์๋ฅผ ํธ์ถ (
super())
- ํจ์ : ๋ถ๋ชจ์ ๋งค๊ฐ๋ณ์ ์๋ ์์ฑ์๋ง ์์ผ๋ฉด, ์์์ ๋ช
์์ ์ผ๋ก
super(...) ํธ์ถ ํ์
์๊ธฐ ์ ๊ฒ
- ๋ถ๋ชจ ํด๋์ค์ ๋งค๊ฐ๋ณ์ ์๋ ์์ฑ์๋ง ์๊ณ ์์์์
super๋ฅผ ์ ์ฐ๋ฉด ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋๊ฐ?
- ๋ค์ค ์์์ด ์๋ฐ์์ ๊ธ์ง๋ ์ด์ ๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.301
Unit 2.4 โ ๋คํ์ฑ (Polymorphism)
์ ์ ์ง์: Unit 2.3
ํต์ฌ ๊ฐ๋
- ๋ถ๋ชจ ํ์
๋ณ์๊ฐ ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ค
- ๋ฉ์๋ ํธ์ถ ์ ์ค์ ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ์คํ๋จ (๋์ ๋ฐ์ธ๋ฉ)
- "ํ ๋ณํ์ ํด๋ ํธ์ถ๋๋ ๊ฑด ์๋ ๊ฐ์ฒด์ ๋ฉ์๋"
์๊ธฐ ์ ๊ฒ
Animal a = new Dog(); a.eat(); ์์ ํธ์ถ๋๋ eat()์ ๋๊ตฌ ๊ฒ์ธ๊ฐ?
- ์ปดํ์ผ ํ์ ํ์
๊ณผ ๋ฐํ์ ํ์
์ ์ฐจ์ด๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.317
Unit 2.5 โ instanceof์ ํ๋ณํ
์ ์ ์ง์: Unit 2.4
ํต์ฌ ๊ฐ๋
instanceof๋ก ์ค์ ํ์
ํ์ธ
- ๊ฐ์ฅ ํ์ ์์ ํ์
๋ถํฐ ํ์ธํด์ผ ์ ํํ ๋ถ๊ธฐ ๊ฐ๋ฅ
- Java 16+ ํจํด ๋งค์นญ:
if (a instanceof Dog d) { d.bark(); }
์๊ธฐ ์ ๊ฒ
- ๋ถ๋ชจ ํ์
์ ์์ ํ์
์ผ๋ก ์บ์คํ
ํ๊ธฐ ์ ์ ์
instanceof ๊ฒ์ฌ๊ฐ ํ์ํ๊ฐ?
Object instanceof String ์ด false์ผ ์ ์๋ ๊ฒฝ์ฐ๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.315
Unit 2.6 โ Nested / Inner / Anonymous ํด๋์ค
์ ์ ์ง์: Unit 2.4
ํต์ฌ ๊ฐ๋
- Nested ํด๋์ค: ํด๋์ค ์์ ํด๋์ค
- ๋ด๋ถ ํด๋์ค = Inner ํด๋์ค (์ด๋ฆ ์์)
- ์ต๋ช
ํด๋์ค = Anonymous ํด๋์ค (์ด๋ฆ ์์, ์ฆ์ ์ ์)
- ๋๋ค์ ์ ์
์๊ธฐ ์ ๊ฒ
- ์ต๋ช
ํด๋์ค๋ ์ธ์ ๋๋ค๋ก ๋์ฒดํ ์ ์๋๊ฐ?
- ๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค์ private ํ๋์ ์ ๊ทผ ๊ฐ๋ฅํ ์ด์ ๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.530, p.535
๐ Phase 3 โ SOLID 5์์น
๋ชฉํ: OOP ๋ฌธ๋ฒ์ ์์ง๋ง "์ ์ง ์ฝ๋"๊ฐ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๋ ๋จ๊ณ์์, ๋ณ๊ฒฝ์ ๊ฐํ ์ฝ๋์ 5๊ฐ์ง ๊ท์น์ ์ฒด๋ํ๋ค.
Unit 3.1 โ SRP (๋จ์ผ ์ฑ
์ ์์น)
์ ์ ์ง์: Phase 2 ์ ์ฒด
ํต์ฌ ๊ฐ๋
- "ํด๋์ค๋ ๋ณ๊ฒฝ ์ด์ ๊ฐ ํ๋์ฌ์ผ ํ๋ค"
- ํ ํด๋์ค์ DB ์ ์ฅ + ๋ฉ์ผ ๋ฐ์ก + ๋ฆฌํฌํธ ์์ฑ์ด ๋ค ๋ค์ด์์ผ๋ฉด โ
- ์ฑ
์๋ณ๋ก ํด๋์ค ๋ถ๋ฆฌ:
User / UserRepository / EmailService
์๊ธฐ ์ ๊ฒ
- "์ฑ
์"์ ๋จ์๋ ์ด๋ป๊ฒ ์ ์ํ๋๊ฐ?
- SRP๋ฅผ ๋๋ฌด ์๊ฒฉํ ์ ์ฉํ๋ฉด ์ด๋ค ๋ถ์์ฉ์ด ์๋๊ฐ?
Unit 3.2 โ OCP (๊ฐ๋ฐฉ-ํ์ ์์น)
์ ์ ์ง์: Unit 3.1, ์ธํฐํ์ด์ค ๊ฐ๋
ํต์ฌ ๊ฐ๋
- "ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์์ ์๋ ๋ซํ์์ด์ผ ํ๋ค"
- if-else๋ก ํ์
๋ถ๊ธฐ โ ์ธํฐํ์ด์ค๋ก ๋คํ์ฑ ํ์ฉ
- ์ ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๊ธฐ์กด ์ฝ๋ ์ ๊ฑด๋๋ฆฌ๋ ๊ฒ ๋ชฉํ
์๊ธฐ ์ ๊ฒ
if (type.equals("VIP")) ๊ฐ์ ์ฝ๋๋ ์ OCP ์๋ฐ์ธ๊ฐ?
- Strategy ํจํด์ด OCP์ ๋ํ ๊ตฌํ์ฒด์ธ ์ด์ ๋?
Unit 3.3 โ LSP (๋ฆฌ์ค์ฝํ ์นํ ์์น)
์ ์ ์ง์: Unit 2.4, Unit 3.2
ํต์ฌ ๊ฐ๋
- "์์์ ๋ถ๋ชจ๋ฅผ ์๋ฒฝํ ๋์ฒดํ ์ ์์ด์ผ ํ๋ค"
Penguin extends Bird ์์ fly()๋ฅผ ๋ง์ผ๋ฉด LSP ์๋ฐ
- ํด๊ฒฐ: ์์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ค๊ณ (FlyingBird ์ธํฐํ์ด์ค ๋ถ๋ฆฌ)
์๊ธฐ ์ ๊ฒ
- ์์์ด ๋ถ๋ชจ์ ๋ฉ์๋์
UnsupportedOperationException์ ๋์ง๋ฉด ์ ์ ๋๋๊ฐ?
- LSP๊ฐ ๊นจ์ง๋ฉด ๋คํ์ฑ๋ ๊นจ์ง๋ ์ด์ ๋?
Unit 3.4 โ ISP (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
์ ์ ์ง์: Unit 3.3
ํต์ฌ ๊ฐ๋
- "ํด๋ผ์ด์ธํธ๋ ์ ์ฐ๋ ์ธํฐํ์ด์ค์ ์์กดํ์ง ๋ง ๊ฒ"
Worker { work(); eat(); } โ Robot์๋ eat() ๋ถํ์
- ํด๊ฒฐ:
Workable๊ณผ Eatable๋ก ๋ถ๋ฆฌ
์๊ธฐ ์ ๊ฒ
- ์ธํฐํ์ด์ค๊ฐ ๋๋ฌด ์๊ฒ ์ชผ๊ฐ์ง๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ธฐ๋๊ฐ?
- ISP์ SRP์ ์ฐจ์ด๋?
Unit 3.5 โ DIP (์์กด ์ญ์ ์์น)
์ ์ ์ง์: Unit 3.4
ํต์ฌ ๊ฐ๋
- "์ถ์ํ์ ์์กดํ๋ผ, ๊ตฌ์ฒด์ ์์กดํ์ง ๋ง๋ผ"
Computer๊ฐ new Keyboard() ๋ฅผ ์ง์ ๋ง๋ค๋ฉด โ
- ํด๊ฒฐ:
InputDevice ์ธํฐํ์ด์ค์ ์์กด, ์ธ๋ถ์์ ์ฃผ์
(DI)
- Spring์ ์์กด์ฑ ์ฃผ์
๊ณผ ์ ํํ ๊ฐ์ ์๋ฆฌ
์๊ธฐ ์ ๊ฒ
- "์์กด์ฑ ์ญ์ "์์ ๋ฌด์์ด ๋ฌด์์ผ๋ก ์ญ์ ๋๋ ๊ฒ์ธ๊ฐ?
- DIP์ DI(Dependency Injection)์ ๊ด๊ณ๋?
๐ Phase 4 โ JVM ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ
๋ชฉํ: ๊ฐ์ฒด๊ฐ ์ด๋์ ์ด๋ป๊ฒ ์ ์ฅ๋๋์ง๋ฅผ ๋ณธ ๋ค์, "Pass by value์ ์ง์ค"์ ์ดํดํ๋ค.
Unit 4.1 โ JVM ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ
์ ์ ์ง์: Phase 1, 2
ํต์ฌ ๊ฐ๋
- Method Area: ํด๋์ค ์ ๋ณด, static ๋ณ์, Constant Pool
- Heap: ๋ชจ๋ ๊ฐ์ฒด (
new๋ก ๋ง๋ ๊ฒ)
- Stack (์ค๋ ๋๋ณ): ๋ฉ์๋ ํธ์ถ ํ๋ ์, ์ง์ญ๋ณ์
- PC Register, Native Method Stack
์๊ธฐ ์ ๊ฒ
Member m = new Member() ์์ m์ ์ด๋์, ๊ฐ์ฒด ๋ณธ์ฒด๋ ์ด๋์ ์ ์ฅ๋๋๊ฐ?
- static ๋ณ์์ ์ธ์คํด์ค ๋ณ์์ ์ ์ฅ ์์น ์ฐจ์ด๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.83 (JVM ๊ตฌ์กฐ)
Unit 4.2 โ Pass by value (์๋ฐ์ ์ง์ค)
์ ์ ์ง์: Unit 4.1
ํต์ฌ ๊ฐ๋
- ์๋ฐ์๋ pass by reference๊ฐ ์๋ค
- ๊ธฐ๋ณธ ์๋ฃํ: ๊ฐ์ด ๋ณต์ฌ๋จ
- ์ฐธ์กฐ ์๋ฃํ: ์ฃผ์๊ฐ์ด ๋ณต์ฌ๋จ โ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก ํ๋ ๋ณ๊ฒฝ์ด ํธ์ถ์์ ๋ณด์
- ๋ฉ์๋ ์์์
new๋ก ์ฌํ ๋นํ๋ฉด ํธ์ถ์์ ์ํฅ ์์
์๊ธฐ ์ ๊ฒ
- ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ String์
b = "z" ๋ฅผ ํ๋ฉด ์ ํธ์ถ์์ ์ํฅ์ด ์๋๊ฐ?
- ์ฐธ์กฐ ์๋ฃํ์ด๋ผ๋ ํธ์ถ์์ ์ํฅ ์๊ฒ ํ๋ ค๋ฉด?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.246
๐ Phase 5 โ GC (Garbage Collection)
๋ชฉํ: GC์ ๋์ ์๋ฆฌยท์๊ณ ๋ฆฌ์ฆยท์ข
๋ฅ๋ฅผ ์ดํดํด์ ์ด์ ํ๊ฒฝ์์ GC๋ฅผ ์ ํยทํ๋ํ ์ ์๋ค.
Unit 5.1 โ GC์ ๊ธฐ๋ณธ ๊ฐ๋
๊ณผ ์ฝํ ์ธ๋ ๊ฐ์ค
์ ์ ์ง์: Unit 4.1
ํต์ฌ ๊ฐ๋
- Garbage = ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด
- GC = Heap์์ Garbage๋ฅผ ์๋์ผ๋ก ์๊ฑฐํ๋ ๋ฉ์ปค๋์ฆ
- ์ฝํ ์ธ๋ ๊ฐ์ค: ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ฃฝ๊ณ , ์ค๋๋ ๊ฐ์ฒด๊ฐ ์ ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค
- STW(Stop The World): GC ๋์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์ค๋ ๋ ์ ์ง
์๊ธฐ ์ ๊ฒ
- ์ฝํ ์ธ๋ ๊ฐ์ค์ด ๋ง๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ๋ ๊ฒ ํฉ๋ฆฌ์ ์ธ๊ฐ?
- "GC ํ๋"์ด ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์์ ์ค์ด๋ ๊ฒ์ธ๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.83
Unit 5.2 โ Heap์ ์ธ๋ ๊ตฌ์กฐ
์ ์ ์ง์: Unit 5.1
ํต์ฌ ๊ฐ๋
- Young Generation: Eden, Survivor 0(From), Survivor 1(To)
- Old Generation: ์ฅ์ ๊ฐ์ฒด
- ๊ฐ์ฒด์ ์ผ์:
- Eden ์์ฑ
- Minor GC โ ์ด์๋จ์ผ๋ฉด Survivor๋ก
- FromโTo ์ค์์นญํ๋ฉฐ Nํ ์์กด
- Old๋ก Promotion
- Old ๊ฐ๋ ์ฐจ๋ฉด Full GC + STW
์๊ธฐ ์ ๊ฒ
- Survivor๊ฐ ๋ ๊ฐ(From, To)๋ก ๋๋์ด ์๋ ์ด์ ๋?
- ๊ฑฐ๋ ๊ฐ์ฒด(Survivor ์์ญ๋ณด๋ค ํฐ)๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋๊ฐ?
Unit 5.3 โ GC ์๊ณ ๋ฆฌ์ฆ 4๊ฐ์ง
์ ์ ์ง์: Unit 5.2
ํต์ฌ ๊ฐ๋
| ์๊ณ ๋ฆฌ์ฆ | ํต์ฌ | ๋จ์ |
|---|
| Reference Counting | ์ฐธ์กฐ ์นด์ดํธ 0์ด๋ฉด ํ์ | ์ํ ์ฐธ์กฐ ์ ๋ฉ๋ชจ๋ฆฌ ๋์ |
| Mark-and-Sweep | Root์์ ์ถ์ ํด ๋งํน ํ ๋น๋งํน ๊ฐ์ฒด ์ ๊ฑฐ | Compaction ์์ด์ ๋จํธํ |
| Mark-and-Compact | Sweep ํ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ชจ์ | Compact ์ค๋ฒํค๋ |
| Generational (์ค์ ์ฌ์ฉ) | Young/Old ๋ถ๋ฆฌ ๊ด๋ฆฌ | ๊ตฌ์กฐ ๋ณต์ก |
์๊ธฐ ์ ๊ฒ
- ์ํ ์ฐธ์กฐ๊ฐ Reference Counting์์ ์ ๋ฌธ์ ์ธ์ง ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ณด๋ผ
- Mark-and-Sweep์์ OOM์ด ๋ฐ์ํ ์ ์๋ ์ด์ ๋?
Unit 5.4 โ GC ์ข
๋ฅ์ ์ ํ ๊ธฐ์ค
์ ์ ์ง์: 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
์๊ธฐ ์ ๊ฒ
- G1 GC๊ฐ ํฐ Heap์ ์ ํฉํ ์ด์ ๋?
- ZGC์ G1์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋?
๐ Phase 6 โ ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ (๋ฌธ์์ดยท์ปฌ๋ ์
)
๋ชฉํ: ์๋ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดยท์กฐ์ํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฉ๋์ ๋ง๊ฒ ์ ํํ ์ ์๋ค.
Unit 6.1 โ String๊ณผ Constant Pool
์ ์ ์ง์: Unit 4.1
ํต์ฌ ๊ฐ๋
- ๋ฆฌํฐ๋ด
"hello" ๋ String Constant Pool ์ ์ ์ฅ
- ๊ฐ์ ๊ฐ์ ๋ฆฌํฐ๋ด์ ์ฌ์ฌ์ฉ (
a == b ๊ฐ true๊ฐ ๋จ)
new String("hello") ๋ ๊ฐ์ ๋ก Heap์ ์ ๊ฐ์ฒด ์์ฑ
- String์ ๋ถ๋ณ(immutable) ๊ฐ์ฒด
์๊ธฐ ์ ๊ฒ
String a = "abc"; String b = new String("abc"); a.equals(b) ์ a == b ์ ๊ฒฐ๊ณผ๋?
- String์ด ๋ถ๋ณ์ด์ด์ ์ป๋ ์ด์ ์?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.483
Unit 6.2 โ StringBuilder vs StringBuffer
์ ์ ์ง์: Unit 6.1
ํต์ฌ ๊ฐ๋
- ๋ ๋ค ๊ฐ๋ณ ๋ฌธ์์ด (๋ด๋ถ char ๋ฐฐ์ด)
append() ๋ ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์์, ๋ฉ์๋ ์ฒด์ด๋ ๊ฐ๋ฅ
- StringBuilder: ๋จ์ผ ์ค๋ ๋์ฉ (๋น ๋ฆ)
- StringBuffer: ๋ฉํฐ ์ค๋ ๋์ฉ (synchronized, ๋๋ฆผ)
- ๋ฃจํ ์์ ๋ฌธ์์ด ํฉ์น๊ธฐ๋ ๋ฐ๋์ ์ด๊ฑธ๋ก
์๊ธฐ ์ ๊ฒ
String + String + ... ์ 100๋ง ๋ฒ ๋ฐ๋ณตํ๋ฉด ๋ฌด์จ ์ผ์ด?
- ๋ฉ์๋ ๋ก์ปฌ์์๋ ๋ ์ค ๋ฌด์์ ์จ์ผ ํ๋๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 1, p.483
Unit 6.3 โ ArrayList vs LinkedList
์ ์ ์ง์: Unit 6.1, ๋ฐฐ์ด ๊ฐ๋
ํต์ฌ ๊ฐ๋
| ์์
| ArrayList | LinkedList |
|---|
get(i) | O(1) | O(n) |
| ๋์ add | O(1) ํ๊ท | O(1) |
| ์ค๊ฐ add/remove | O(n) | O(1) (์์น ์ ๋) |
| ๋ฉ๋ชจ๋ฆฌ | ์ ์ | ๋ง์ (prev/next ํฌ์ธํฐ) |
์๊ธฐ ์ ๊ฒ
- ์ธ๋ฑ์ค ์ ๊ทผ์ด ๋ง์ ์ํฌ๋ก๋์ LinkedList๋ฅผ ์ฐ๋ฉด ์ด๋ป๊ฒ ๋๋๊ฐ?
- ํ(Queue)๋ก ์ธ ๋๋ ์ด๋ ์ชฝ์ด ์ ํฉํ๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 2, p.109
Unit 6.4 โ HashMap๊ณผ LoadFactor
์ ์ ์ง์: Unit 6.3, ํด์ ํจ์ ๊ฐ๋
ํต์ฌ ๊ฐ๋
- ๋ด๋ถ: ๋ฐฐ์ด + ํด์ + (์ถฉ๋ ์) ์ฐ๊ฒฐ ๋ฆฌ์คํธ โ Java 8๋ถํฐ ํธ๋ฆฌ
- LoadFactor 0.75: ๋ฐฐ์ด์ 75% ๊ฐ ์ฐจ๋ฉด ๋ฐฐ์ด์ 2๋ฐฐ๋ก ํ์ฅํ๊ณ rehash
- LoadFactor๊ฐ ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น, ํฌ๋ฉด ์ถฉ๋ ์ฆ๊ฐ
์๊ธฐ ์ ๊ฒ
- LoadFactor 1.0 ์ผ๋ก ์ค์ ํ๋ฉด ๋ฌด์จ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๊ฐ?
- HashMap ํค๋ก ์ฐ๋ ๊ฐ์ฒด์
equals()๋ง ์ฌ์ ์ํ๋ฉด?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 2, p.104
Unit 6.5 โ TreeMap๊ณผ SortedMap
์ ์ ์ง์: Unit 6.4
ํต์ฌ ๊ฐ๋
- ๋ด๋ถ: Red-Black Tree (์๊ฐ ๊ท ํ ์ด์งํ์ํธ๋ฆฌ)
- ํค๊ฐ ํญ์ ์ ๋ ฌ๋ ์ํ
put, get, remove ๋ชจ๋ O(log n) (HashMap์ O(1)๋ณด๋ค ๋๋ฆผ)
- ํค๋
Comparable ๊ตฌํ ๋๋ Comparator ์ ๊ณต ํ์
์๊ธฐ ์ ๊ฒ
- ์ ๋ ฌ์ด ํ์ ์๋๋ฐ TreeMap์ ์ฐ๋ฉด ์ด๋ค ์ํด๊ฐ ์๋๊ฐ?
- "๋ ์ง๋ณ ๋งค์ถ"์ ์ ์ฅํ๊ธฐ์ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 2, p.132
๐ Phase 7 โ ์ธ๋ถ ์ธ๊ณ์์ ํต์ (I/Oยท์ง๋ ฌํ)
๋ชฉํ: ํ์ผ, ๋คํธ์ํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ถ์ํ์ ์ง๋ ฌํ์ ๋ณด์ ํจ์ ๊น์ง ์ดํดํ๋ค.
Unit 7.1 โ try-finally โ try-with-resources
์ ์ ์ง์: Phase 2 (์์ธ ๊ฐ๋
ํ์)
ํต์ฌ ๊ฐ๋
- ์์(ํ์ผ, ์์ผ, DB ์ปค๋ฅ์
)์ ๋ฐ๋์ close ํด์ผ ํจ
- try ์์์ closeํ๋ฉด ์์ธ ์ ํธ์ถ ์ ๋จ โ finally ํ์
- Java 7+:
try (Resource r = ...) { } โ ์๋ close
AutoCloseable ์ธํฐํ์ด์ค ๊ตฌํ ํ์
์๊ธฐ ์ ๊ฒ
- try ์์์ close()๋ฅผ ํ๋ฉด ์ด๋ค ์๋๋ฆฌ์ค์์ ๋์๊ฐ ๋ฐ์ํ๋๊ฐ?
- ์ฌ๋ฌ ์์์ try-with-resources์์ ์ ์ธํ๋ฉด close ์์๋?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 2, p.211
Unit 7.2 โ File โ NIO.2 (Files, Path)
์ ์ ์ง์: Unit 7.1
ํต์ฌ ๊ฐ๋
- ์ ํต
java.io.File: ๊ฐ์ฒด ์์ฑ ํ์, ์์ธ ์ ๋ณด ๋น์ฝ (delete()๊ฐ false๋ง ๋ฐํ)
- NIO.2
java.nio.file.Files: ๋ชจ๋ ๋ฉ์๋๊ฐ static, ์ ํํ ์์ธ throw
Path๋ก ํ์ผ ๊ฒฝ๋ก ํํ
์๊ธฐ ์ ๊ฒ
File.delete() ๊ฐ false๋ฅผ ๋ฐํํ์ ๋ ์ด์ ๋ฅผ ์ ์ ์๋๊ฐ?
Files.delete(path) ๊ฐ ๋์ง๋ ์์ธ์๋ ๋ฌด์์ด ์๋๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 2, p.191
Unit 7.3 โ NIO (Channel + Buffer)
์ ์ ์ง์: Unit 7.2
ํต์ฌ ๊ฐ๋
- ์ ํต I/O: Stream, ํ ๋ฐ์ดํธ์ฉ, ๋ธ๋กํน
- NIO: Channel โ Buffer, ๋ธ๋ก ๋จ์, ๋
ผ๋ธ๋กํน ๊ฐ๋ฅ
- Selector: ํ ์ค๋ ๋๊ฐ ์ฌ๋ฌ ์ฑ๋์ ๊ฐ์
- ๋์ ์ ์ 1๋ง ๋ช
์๋๋ฆฌ์ค์์ ์ฐจ์ด๊ฐ ๊ทน๋ช
์๊ธฐ ์ ๊ฒ
- ๋ธ๋กํน I/O๋ก 1๋ง ๋์ ์ ์์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ค๋ ๋๊ฐ ๋ช ๊ฐ ํ์ํ๊ฐ?
- Selector๋ ์ด๋ป๊ฒ ํ ์ค๋ ๋๋ก ์ฌ๋ฌ ์ฑ๋์ ์ฒ๋ฆฌํ๋๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 2, p.230
Unit 7.4 โ Serializable๊ณผ transient
์ ์ ์ง์: Phase 2
ํต์ฌ ๊ฐ๋
Serializable ๊ตฌํ โ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ณํ ๊ฐ๋ฅ
serialVersionUID ๋ช
์ ํ์ (์ ํ๋ฉด ํด๋์ค ๋ณ๊ฒฝ ์ ์ญ์ง๋ ฌํ ๊นจ์ง)
transient: ์ง๋ ฌํ์์ ์ ์ธํ ํ๋
- ๋น๋ฐ๋ฒํธ, ํ ํฐ, ์์ ์บ์๋ transient ํ์
์๊ธฐ ์ ๊ฒ
- ๋น๋ฐ๋ฒํธ ํ๋์ transient๋ฅผ ์ ๋ถ์ด๋ฉด ๋ฌด์จ ๋ณด์ ์ฌ๊ณ ๊ฐ ๊ฐ๋ฅํ๊ฐ?
serialVersionUID ๋ฅผ ๋ช
์ ์ ํ๋ฉด ์ธ์ ๋ฌธ์ ๊ฐ ํฐ์ง๋๊ฐ?
์๋ณธ ์๋ฃ: ์๋ฐ์์ 2, p.230
๐ ์ข
ํฉ ์๊ธฐ ์ ๊ฒ (1์ฃผ์ฐจ ์กธ์
์ํ)
๊ฐ ์ง๋ฌธ์ ๋งํ์์ด ๋ตํ ์ ์๋ค๋ฉด 1์ฃผ์ฐจ๋ ํฉ๊ฒฉ์ด๋ค.
OOP & ํด๋์ค
- C ๊ตฌ์กฐ์ฒด๋ก OOP๋ฅผ ํ๋ด๋ผ ์๋ ์์ง๋ง Java์ ๊ฒฐ์ ์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ?
- ํด๋์ค๊ฐ ๊ฐ์ ธ์ผ ํ ๋ ๊ฐ์ง๋?
- ์์ ํด๋์ค์์
super(...) ๋ฅผ ๋ช
์์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ๋?
- ๋คํ์ฑ์์ "ํ ๋ณํ์ ํด๋ ํธ์ถ๋๋ ๊ฑด ์๋ ๊ฐ์ฒด์ ๋ฉ์๋"๋ผ๋ ๋ง์ ์๋ฏธ๋?
- instanceof ๊ฒ์ฌ๋ฅผ ๊ฐ์ฅ ํ์ ์์๋ถํฐ ํด์ผ ํ๋ ์ด์ ๋?
SOLID
- SRP ์๋ฐ ์ฌ๋ก๋ฅผ ์๊ธฐ ์ฝ๋์์ ํ๋ ์ฐพ์ ์ค๋ช
ํด๋ณด๋ผ
- OCP๋ฅผ ์ธํฐํ์ด์ค ์์ด ์ ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ฐ?
- LSP๊ฐ ๊นจ์ง๋ฉด ๋คํ์ฑ๋ ๊นจ์ง๋ ์ด์ ๋?
- DIP์ Spring์ DI๋ ์ด๋ค ๊ด๊ณ์ธ๊ฐ?
JVM & GC
Member m = new Member() ์์ m๊ณผ ๊ฐ์ฒด ๋ณธ์ฒด๋ ๊ฐ๊ฐ ์ด๋์ ์ ์ฅ๋๋๊ฐ?
- ์๋ฐ์ pass by reference๊ฐ ์๋ค๋ ๋ง์ ์ ํํ ์๋ฏธ๋?
- ์ฝํ ์ธ๋ ๊ฐ์ค์ ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช
ํด๋ณด๋ผ
- Eden โ Survivor โ Old๋ก ๊ฐ์ฒด๊ฐ ์ด๋ํ๋ ์กฐ๊ฑด์?
- Mark-and-Sweep๊ณผ Mark-and-Compact์ ์ฐจ์ด๋?
- G1 GC๊ฐ ํฐ Heap์ ์ ํฉํ ์ด์ ๋?
๋ฐ์ดํฐ ๊ตฌ์กฐ
String a = "abc"; String b = "abc"; ์ผ ๋ a == b ๊ฐ true์ธ ์ด์ ๋?
- ๋ฃจํ ์์์ String์ +๋ก ํฉ์น๋ฉด ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋๊ฐ?
- ArrayList์ ์ค๊ฐ ์ญ์ ๊ฐ O(n)์ธ ์ด์ ๋?
- HashMap์ LoadFactor 0.75 ์๋ฏธ๋?
- TreeMap์ด HashMap๋ณด๋ค ๋๋ฆฐ ์ด์ ์, ๊ทธ๋ผ์๋ ์ฐ๋ ์ด์ ๋?
I/O & ์ง๋ ฌํ
- try ์์์ close()๋ฅผ ํ๋ฉด ๋ฌด์์ด ๋์๋๋๊ฐ?
- NIO๊ฐ ์ ํต I/O๋ณด๋ค ๋์ ์ ์์ ์ ๋ฆฌํ ์ด์ ๋?
- transient๋ฅผ ๋น๋ฐ๋ฒํธ์ ์ ๋ถ์ด๋ฉด ์ด๋ค ๋ณด์ ์ฌ๊ณ ๊ฐ ๋๋๊ฐ?
File๋ณด๋ค Files/Path ๋ฅผ ๊ถ์ฅํ๋ ๋ ๊ฐ์ง ์ด์ ๋?
๐ ํ์ต ์ด์ ํ
๊ฐ Unit์ 9-์น์
๋ง์คํฐ ํ๋กฌํํธ๋ก ๊น์ด ํ๊ธฐ
์ด ์ปค๋ฆฌํ๋ผ์ ๊ฐ Unit์ 9-์น์
๋ง์คํฐ ํ๋กฌํํธ(์ธ์ ์ ๋น์ โ ํ์ ๋ฐฐ๊ฒฝ โ ์์ผ๋ฉด ์๊ธฐ๋ ๋ฌธ์ โ ํด๊ฒฐ์ฑ
โ ๋ด๋ถ ๋์ โ ์ค์ ์ฝ๋ โ ์ฃผ์์ฌํญ โ ์ฐ๊ด ๊ฐ๋
โ ํต์ฌ ์์ฝ)๋ก ํ์ฅ ํ์ต ๊ฐ๋ฅํ๋ค.
ํนํ ๋ค์ Unit์ ๋ฐ๋์ 9-์น์
์ผ๋ก ๊น์ด ํ๋ ๊ฑธ ์ถ์ฒํ๋ค.
- Unit 3.1 ~ 3.5 (SOLID 5์์น) โ ๋ฉด์ ๋จ๊ณจ
- Unit 4.2 (Pass by value) โ ๋ฉํ ๋ฉด๋ด ๋๋น ํ์
- Unit 5.2 ~ 5.3 (GC ๋์ ์๋ฆฌ) โ ์ค๋ฌด ํ๋์ ์ถ๋ฐ์
- Unit 6.4 (HashMap ๋ด๋ถ) โ ๋ฉด์ ๋จ๊ณจ
Phase๋ณ ์ง๋ ์ฒดํฌ๋ฆฌ์คํธ
[ ] 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๋ฌธํญ ํต๊ณผ
ILIC ์ค๋ฌด ์ฐ๊ฒฐ ์ง์
๊ฐ 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 ์ง๋ ฌํ |