๐ŸŽฏ F-lab Java 1์ฃผ์ฐจ ํ•™์Šต ์ปค๋ฆฌํ˜๋Ÿผ

Psjยท6์ผ ์ „

F-lab

๋ชฉ๋ก ๋ณด๊ธฐ
5/42

๐ŸŽฏ 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์ผ ๊ธฐ์ค€)

DayPhaseํ•™์Šต ๋ชฉํ‘œ
1์ผ์ฐจPhase 1 + 2OOP ํŒจ๋Ÿฌ๋‹ค์ž„๊ณผ ํด๋ž˜์Šค ๋ฌธ๋ฒ• ๋๋‚ด๊ธฐ
2์ผ์ฐจPhase 3SOLID 5์›์น™ ์ฝ”๋“œ ๋ ˆ๋ฒจ๋กœ ์ฒดํ™”
3์ผ์ฐจPhase 4JVM ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธยทPass by value ์ •๋ณต
4์ผ์ฐจPhase 5GC ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ GC ์ข…๋ฅ˜ ์ •๋ฆฌ
5์ผ์ฐจPhase 6 (์ „๋ฐ˜)String, StringBuilder, ArrayList vs LinkedList
6์ผ์ฐจPhase 6 (ํ›„๋ฐ˜)HashMap, TreeMap, ๊ฐ€๋ณ€์ธ์ž
7์ผ์ฐจPhase 7I/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: ์žฅ์ˆ˜ ๊ฐ์ฒด
  • ๊ฐ์ฒด์˜ ์ผ์ƒ:
    1. Eden ์ƒ์„ฑ
    2. Minor GC โ†’ ์‚ด์•„๋‚จ์œผ๋ฉด Survivor๋กœ
    3. Fromโ†”To ์Šค์œ„์นญํ•˜๋ฉฐ NํšŒ ์ƒ์กด
    4. Old๋กœ Promotion
    5. Old ๊ฐ€๋“ ์ฐจ๋ฉด Full GC + STW

์ž๊ธฐ ์ ๊ฒ€

  • Survivor๊ฐ€ ๋‘ ๊ฐœ(From, To)๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋Š” ์ด์œ ๋Š”?
  • ๊ฑฐ๋Œ€ ๊ฐ์ฒด(Survivor ์˜์—ญ๋ณด๋‹ค ํฐ)๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€?

Unit 5.3 โ€” GC ์•Œ๊ณ ๋ฆฌ์ฆ˜ 4๊ฐ€์ง€

์„ ์ˆ˜ ์ง€์‹: Unit 5.2

ํ•ต์‹ฌ ๊ฐœ๋…

์•Œ๊ณ ๋ฆฌ์ฆ˜ํ•ต์‹ฌ๋‹จ์ 
Reference Counting์ฐธ์กฐ ์นด์šดํŠธ 0์ด๋ฉด ํšŒ์ˆ˜์ˆœํ™˜ ์ฐธ์กฐ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜
Mark-and-SweepRoot์—์„œ ์ถ”์ ํ•ด ๋งˆํ‚น ํ›„ ๋น„๋งˆํ‚น ๊ฐ์ฒด ์ œ๊ฑฐCompaction ์—†์–ด์„œ ๋‹จํŽธํ™”
Mark-and-CompactSweep ํ›„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋ชจ์ŒCompact ์˜ค๋ฒ„ํ—ค๋“œ
Generational (์‹ค์ œ ์‚ฌ์šฉ)Young/Old ๋ถ„๋ฆฌ ๊ด€๋ฆฌ๊ตฌ์กฐ ๋ณต์žก

์ž๊ธฐ ์ ๊ฒ€

  • ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ Reference Counting์—์„œ ์™œ ๋ฌธ์ œ์ธ์ง€ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๋ผ
  • Mark-and-Sweep์—์„œ OOM์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š”?

Unit 5.4 โ€” GC ์ข…๋ฅ˜์™€ ์„ ํƒ ๊ธฐ์ค€

์„ ์ˆ˜ ์ง€์‹: Unit 5.3

ํ•ต์‹ฌ ๊ฐœ๋…

GC๋“ฑ์žฅํŠน์ง•์ ํ•ฉ ํ™˜๊ฒฝ
Serial GC์ดˆ๊ธฐ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œCPU 1๊ฐœ, ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ
Parallel GCJava 7~8 default๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ GC์ฒ˜๋ฆฌ๋Ÿ‰ ์šฐ์„ 
CMS(Java 9 deprecated)STW ์ตœ์†Œํ™”์‘๋‹ต์„ฑ ์ค‘์š”
G1 GCJava 9+ defaultRegion ๋‹จ์œ„๋Œ€๋ถ€๋ถ„์˜ ์„œ๋ฒ„
Z GCJava 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, ๋ฐฐ์—ด ๊ฐœ๋…

ํ•ต์‹ฌ ๊ฐœ๋…

์ž‘์—…ArrayListLinkedList
get(i)O(1)O(n)
๋์— addO(1) ํ‰๊ท O(1)
์ค‘๊ฐ„ add/removeO(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 & ํด๋ž˜์Šค

  1. C ๊ตฌ์กฐ์ฒด๋กœ OOP๋ฅผ ํ‰๋‚ด๋‚ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ Java์™€ ๊ฒฐ์ •์  ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?
  2. ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  ๋‘ ๊ฐ€์ง€๋Š”?
  3. ์ž์‹ ํด๋ž˜์Šค์—์„œ super(...) ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š”?
  4. ๋‹คํ˜•์„ฑ์—์„œ "ํ˜• ๋ณ€ํ™˜์„ ํ•ด๋„ ํ˜ธ์ถœ๋˜๋Š” ๊ฑด ์›๋ž˜ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ"๋ผ๋Š” ๋ง์˜ ์˜๋ฏธ๋Š”?
  5. instanceof ๊ฒ€์‚ฌ๋ฅผ ๊ฐ€์žฅ ํ•˜์œ„ ์ž์‹๋ถ€ํ„ฐ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š”?

SOLID

  1. SRP ์œ„๋ฐ˜ ์‚ฌ๋ก€๋ฅผ ์ž๊ธฐ ์ฝ”๋“œ์—์„œ ํ•˜๋‚˜ ์ฐพ์•„ ์„ค๋ช…ํ•ด๋ณด๋ผ
  2. OCP๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€?
  3. LSP๊ฐ€ ๊นจ์ง€๋ฉด ๋‹คํ˜•์„ฑ๋„ ๊นจ์ง€๋Š” ์ด์œ ๋Š”?
  4. DIP์™€ Spring์˜ DI๋Š” ์–ด๋–ค ๊ด€๊ณ„์ธ๊ฐ€?

JVM & GC

  1. Member m = new Member() ์—์„œ m๊ณผ ๊ฐ์ฒด ๋ณธ์ฒด๋Š” ๊ฐ๊ฐ ์–ด๋””์— ์ €์žฅ๋˜๋Š”๊ฐ€?
  2. ์ž๋ฐ”์— pass by reference๊ฐ€ ์—†๋‹ค๋Š” ๋ง์˜ ์ •ํ™•ํ•œ ์˜๋ฏธ๋Š”?
  3. ์•ฝํ•œ ์„ธ๋Œ€ ๊ฐ€์„ค์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๋ผ
  4. Eden โ†’ Survivor โ†’ Old๋กœ ๊ฐ์ฒด๊ฐ€ ์ด๋™ํ•˜๋Š” ์กฐ๊ฑด์€?
  5. Mark-and-Sweep๊ณผ Mark-and-Compact์˜ ์ฐจ์ด๋Š”?
  6. G1 GC๊ฐ€ ํฐ Heap์— ์ ํ•ฉํ•œ ์ด์œ ๋Š”?

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

  1. String a = "abc"; String b = "abc"; ์ผ ๋•Œ a == b ๊ฐ€ true์ธ ์ด์œ ๋Š”?
  2. ๋ฃจํ”„ ์•ˆ์—์„œ String์„ +๋กœ ํ•ฉ์น˜๋ฉด ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”๊ฐ€?
  3. ArrayList์˜ ์ค‘๊ฐ„ ์‚ญ์ œ๊ฐ€ O(n)์ธ ์ด์œ ๋Š”?
  4. HashMap์˜ LoadFactor 0.75 ์˜๋ฏธ๋Š”?
  5. TreeMap์ด HashMap๋ณด๋‹ค ๋А๋ฆฐ ์ด์œ ์™€, ๊ทธ๋Ÿผ์—๋„ ์“ฐ๋Š” ์ด์œ ๋Š”?

I/O & ์ง๋ ฌํ™”

  1. try ์•ˆ์—์„œ close()๋ฅผ ํ•˜๋ฉด ๋ฌด์—‡์ด ๋ˆ„์ˆ˜๋˜๋Š”๊ฐ€?
  2. NIO๊ฐ€ ์ „ํ†ต I/O๋ณด๋‹ค ๋™์‹œ ์ ‘์†์— ์œ ๋ฆฌํ•œ ์ด์œ ๋Š”?
  3. transient๋ฅผ ๋น„๋ฐ€๋ฒˆํ˜ธ์— ์•ˆ ๋ถ™์ด๋ฉด ์–ด๋–ค ๋ณด์•ˆ ์‚ฌ๊ณ ๊ฐ€ ๋‚˜๋Š”๊ฐ€?
  4. 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๊ฐ€ ์‹ค๋ฌด์—์„œ ๋งŒ๋‚˜๋Š” ์ง€์ ์„ ๋ฏธ๋ฆฌ ์ •๋ฆฌํ•˜๋ฉด ํ•™์Šต ๋™๊ธฐ๊ฐ€ ์œ ์ง€๋œ๋‹ค.

PhaseILIC ์‹ค๋ฌด ์—ฐ๊ฒฐ
3 (SOLID)Service / Repository ๋ถ„๋ฆฌ, Strategy ํŒจํ„ด, Spring DI
4 (JVM)์šด์˜ ์„œ๋ฒ„ heap ์‚ฌ์ด์ฆˆ ๊ฒฐ์ •, OOM ๋ถ„์„
5 (GC)GC ๋กœ๊ทธ ๋ถ„์„, ์‘๋‹ต ์ง€์—ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
6 (Collections)DTO ๋งคํ•‘, ์บ์‹œ ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒ
7 (I/O, Serialization)ํŒŒ์ผ ์—…๋กœ๋“œ, Redis ์„ธ์…˜, JPA Entity ์ง๋ ฌํ™”
profile
Software Developer

0๊ฐœ์˜ ๋Œ“๊ธ€