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

2์ฃผ์ฐจ ์ž๋ฃŒ์˜ ๋ชจ๋“  ํ† ํ”ฝ์„ "ํ‘œ๋ฉด โ†’ ๊นŠ์ด" ์ˆœ์„œ๋กœ ์žฌ๋ฐฐ์—ดํ•œ ํ•™์Šต ๊ฒฝ๋กœ.
1์ฃผ์ฐจ์—์„œ OOPยทJVMยทGCยท์ปฌ๋ ‰์…˜์„ ๊ฐœ๋ก  ์œผ๋กœ ๋ดค๋‹ค๋ฉด, 2์ฃผ์ฐจ๋Š” ๋™์ผ ์ฃผ์ œ๋ฅผ JVM ๋‚ด๋ถ€ยท๋ฐ”์ดํŠธ์ฝ”๋“œยท๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ์ˆ˜์ค€์œผ๋กœ ํŒŒ๊ณ ๋“ ๋‹ค.
์ƒˆ๋กœ ๋“ฑ์žฅํ•˜๋Š” ์ฃผ์ œ: Reflection, Iterator, ๋ฒ„ํผ(Buffer).


๐Ÿ“Š ํ•™์Šต ๊ฒฝ๋กœ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

[Phase 1] ์ž๋ฐ” ๋ณ€์ˆ˜ โ†” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋งคํ•‘
   โ†“
[Phase 2] JVM ๋ฉ”์„œ๋“œ ์‹คํ–‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜
   โ†“
[Phase 3] ๋ฐ”์ดํŠธ์ฝ”๋“œ์™€ ์ƒ์ˆ˜ ํ’€์˜ ์„ธ๊ณ„  โ—„โ”€โ”€ ์—ฌ๊ธฐ๊ฐ€ 2์ฃผ์ฐจ์˜ ์ •์ 
   โ†“
[Phase 4] GC ์‹ฌํ™” โ€” G1 GC ๋“ค์—ฌ๋‹ค๋ณด๊ธฐ
   โ†“
[Phase 5] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด๋ถ€ ๊ตฌ์กฐ
   โ†“
[Phase 6] ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ โ€” Reflection & Iterator
   โ†“
[Phase 7] ๋ณด์กฐ ๊ฐœ๋… โ€” Buffer

์ด 7 Phase ร— 23 Unit โ€” ๊ฐ Unit์€ 30๋ถ„~1์‹œ๊ฐ„ ๋ถ„๋Ÿ‰.

๐Ÿ”— 1์ฃผ์ฐจ์™€์˜ ๊ด€๊ณ„

1์ฃผ์ฐจ (๊ฐœ๋ก )2์ฃผ์ฐจ (์‹ฌํ™”)
JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ 5๋ถ„ํ• Method Area์˜ 3๊ฐœ ์กด ์œผ๋กœ ๋” ์ชผ๊ฐœ๊ธฐ
GC์˜ ๋™์ž‘ ์›๋ฆฌG1 GC ๋ฆฌ์ „ ๋ชจ๋ธ ๊ณผ ์ •์ง€์‹œ๊ฐ„ ์˜ˆ์ธก
ArrayList vs LinkedList ๋น„๊ต๋ฐฐ์—ด ํ™•์žฅ ์ •์ฑ…ยท๋…ธ๋“œ ๊ตฌ์กฐ ์ฝ”๋“œ๋กœ ๊ฒ€์ฆ
(์—†์Œ)๋ฐ”์ดํŠธ์ฝ”๋“œ ์ฝ๊ธฐ, Reflection, Iterator

๐Ÿ—“๏ธ ๊ถŒ์žฅ ํ•™์Šต ์ผ์ • (7์ผ ๊ธฐ์ค€)

DayPhaseํ•™์Šต ๋ชฉํ‘œ
1์ผ์ฐจPhase 1๋ณ€์ˆ˜ 3์ข…๋ฅ˜์™€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋งคํ•‘ ์ •๋ณต
2์ผ์ฐจPhase 2๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด JVM ์•ˆ์—์„œ ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚˜๋Š”์ง€
3์ผ์ฐจPhase 3 (์ „๋ฐ˜)๋ฐ”์ดํŠธ์ฝ”๋“œ ์ฝ๋Š” ๋ฒ• + ์ƒ์ˆ˜ ํ’€
4์ผ์ฐจPhase 3 (ํ›„๋ฐ˜)์‹ฌ๋ณผ ์ฐธ์กฐ์™€ new์˜ ์ง„์‹ค
5์ผ์ฐจPhase 4G1 GC์˜ ๋ชจ๋“  ๊ฒƒ
6์ผ์ฐจPhase 5 + 7์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ + Buffer
7์ผ์ฐจPhase 6Reflection + Iterator

๐Ÿ“š Phase 1 โ€” ์ž๋ฐ” ๋ณ€์ˆ˜์™€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๋งคํ•‘

๋ชฉํ‘œ: "์ด ๋ณ€์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋””์— ์ €์žฅ๋ ๊นŒ?"์— ์ฆ‰๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
1์ฃผ์ฐจ์—์„œ๋Š” Heap/Stack/Method Area๋ฅผ ํฐ ๊ทธ๋ฆผ์œผ๋กœ ๋ดค๋‹ค๋ฉด, ์—ฌ๊ธฐ์„  ๋ณ€์ˆ˜ ์ข…๋ฅ˜ โ†” ์˜์—ญ ๋งคํ•‘ ์„ ์†์— ์ตํžŒ๋‹ค.

Unit 1.1 โ€” ์ž๋ฐ” ๋ณ€์ˆ˜์˜ 3์ข…๋ฅ˜

์„ ์ˆ˜ ์ง€์‹: 1์ฃผ์ฐจ Phase 2 (ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ)

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

  • ์ง€์—ญ ๋ณ€์ˆ˜ (Local): ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์„ ์–ธ, ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ์‹œ ์‚ฌ๋ผ์ง
  • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ (Instance): static ์—†์ด ํด๋ž˜์Šค์— ์„ ์–ธ, ๊ฐ์ฒด๋ณ„๋กœ ์กด์žฌ
  • ํด๋ž˜์Šค ๋ณ€์ˆ˜ (Class / static): static์œผ๋กœ ์„ ์–ธ, ํด๋ž˜์Šค ๋‹จ์œ„ 1๊ฐœ

์ž๊ธฐ ์ ๊ฒ€

  • ํ•œ ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด 100๊ฐœ๋ฅผ ๋งŒ๋“ค๋ฉด ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ํด๋ž˜์Šค ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ๊ฐ๊ฐ?
  • ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์–ด๋А ์ข…๋ฅ˜์— ์†ํ•˜๋Š”๊ฐ€?

Unit 1.2 โ€” ๋ณ€์ˆ˜๋ณ„ ์ €์žฅ ์œ„์น˜ (Stack / Heap / Method Area)

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

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

๋ณ€์ˆ˜ ์ข…๋ฅ˜์ €์žฅ ์˜์—ญ์ƒ์„ฑ ์‹œ์ ์†Œ๋ฉธ ์‹œ์ 
์ง€์—ญ ๋ณ€์ˆ˜Stack๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ
์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜Heap (๊ฐ์ฒด์™€ ํ•จ๊ป˜)new ์‹œ์ GC๊ฐ€ ๊ฐ์ฒด ํšŒ์ˆ˜ ์‹œ
ํด๋ž˜์Šค ๋ณ€์ˆ˜Method Areaํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œJVM ์ข…๋ฃŒ ์‹œ

์ž๊ธฐ ์ ๊ฒ€

  • Member m = new Member() ์—์„œ m(์ฐธ์กฐ)๊ณผ Member ๊ฐ์ฒด ๋ณธ์ฒด์˜ ์ €์žฅ ์œ„์น˜๋Š”?
  • ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์ด์œ ๋Š” ์–ด๋А ์˜์—ญ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๊ฐ€?

Unit 1.3 โ€” Method Area์˜ 3๊ฐœ ์กด (โ˜… 2์ฃผ์ฐจ ํ•ต์‹ฌ)

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

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

Method Area
โ”œโ”€ Class Metadata Zone : ํด๋ž˜์Šค๋ช…, ๋ถ€๋ชจ, ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜, ํ•„๋“œ ์„ ์–ธ ์ •๋ณด
โ”œโ”€ Static Zone         : static ๋ฉ”์„œ๋“œ/ํ•„๋“œ์˜ ์‹ค์ œ ๋ฐ”์ดํŠธ์ฝ”๋“œ
โ””โ”€ Non-Static Zone     : ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์˜ ์‹ค์ œ ๋ฐ”์ดํŠธ์ฝ”๋“œ
  • Class Metadata Zone: "์ด ํด๋ž˜์Šค๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€" (์„ ์–ธ ์ •๋ณด๋งŒ)
  • Static Zone: ์‹ค์ œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ static ๋ฉ”์„œ๋“œ ๋ฐ”์ดํŠธ์ฝ”๋“œ (์„œ๋กœ ์ง์ ‘ ํ˜ธ์ถœ ๊ฐ€๋Šฅ)
  • Non-Static Zone: ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ๋ฐ”์ดํŠธ์ฝ”๋“œ (๊ฐ์ฒด ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ)

์ž๊ธฐ ์ ๊ฒ€

  • main() ์ด Static Zone์— ์žˆ๋Š” ์ด์œ ๋Š”?
  • Static Zone์˜ ๋ฉ”์„œ๋“œ๊ฐ€ Non-Static Zone์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š”?

Unit 1.4 โ€” Stack Area์˜ ๋™์ž‘

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

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

  • LIFO (Last In, First Out) ๊ตฌ์กฐ
  • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame) ์ƒ์„ฑ โ†’ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ์ €์žฅ
  • PC(Program Counter) ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น์„ ๊ฐ€๋ฆฌํ‚ด
  • ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ โ†’ ํ•ด๋‹น ํ”„๋ ˆ์ž„ ์ œ๊ฑฐ

์ž๊ธฐ ์ ๊ฒ€

  • ์žฌ๊ท€ ํ˜ธ์ถœ์ด ๋ฌดํ•œํžˆ ๊นŠ์–ด์ง€๋ฉด ๋ฌด์—‡์ด ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์—์„œ Stack์€ ๊ณต์œ ๋˜๋Š”๊ฐ€, ์•„๋‹ˆ๋ฉด ์Šค๋ ˆ๋“œ๋ณ„๋กœ ๋”ฐ๋กœ์ธ๊ฐ€?

Unit 1.5 โ€” Heap Area์™€ ๊ฐ์ฒด-Metadata ์—ฐ๊ฒฐ

์„ ์ˆ˜ ์ง€์‹: Unit 1.3, Unit 1.4

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

  • new๋กœ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด๋Š” Heap์—
  • ๊ฐ ๊ฐ์ฒด๋Š” Method Area์˜ ์ž๊ธฐ ํด๋ž˜์Šค metadata๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค
  • ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด new ์‹œ์ ์— Heap์˜ ๊ฐ์ฒด ์•ˆ์— ํ•จ๊ป˜ ํ• ๋‹น
  • GC์˜ ์ฒญ์†Œ ๋Œ€์ƒ

์ž๊ธฐ ์ ๊ฒ€

  • ๊ฐ™์€ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด 100๊ฐœ๊ฐ€ ์žˆ์„ ๋•Œ, ๋ฉ”์„œ๋“œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” 100๋ฒˆ ๋ณต์ œ๋˜๋Š”๊ฐ€?
  • ๊ฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž๊ธฐ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„ ํ˜ธ์ถœํ•˜๋Š”๊ฐ€?

Unit 1.6 โ€” Literal Pool Area (๋ฌธ์ž์—ด ์žฌํ™œ์šฉ)

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

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

  • ๋ฌธ์ž์—ด ์ƒ์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์žฌํ™œ์šฉ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
  • "Hello world" ๊ฐ™์€ ๋ฆฌํ„ฐ๋Ÿด์€ ํ•œ ๋ฒˆ๋งŒ ๋งŒ๋“ค๊ณ  ์žฌ์‚ฌ์šฉ
  • 1์ฃผ์ฐจ์—์„œ ๋ณธ String Constant Pool๊ณผ ๊ฐ™์€ ์˜์—ญ

์ž๊ธฐ ์ ๊ฒ€

  • String a = "abc"; String b = "abc"; ์ผ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— String ๊ฐ์ฒด๋Š” ๋ช‡ ๊ฐœ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฐ€?
  • ์ด ์˜์—ญ์˜ ์ด์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ ์™ธ์— ๋˜ ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€?

๐Ÿ“š Phase 2 โ€” JVM ๋ฉ”์„œ๋“œ ์‹คํ–‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋ชฉํ‘œ: ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ•œ ์ค„(obj.method())์ด JVM ์•ˆ์—์„œ ์‹ค์ œ๋กœ ์–ด๋–ค ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Unit 2.1 โ€” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์˜ 2๋‹จ๊ณ„ ์ฒ˜๋ฆฌ

์„ ์ˆ˜ ์ง€์‹: Phase 1 ์ „์ฒด

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

๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ JVM์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ:
1. Class Metadata Zone์—์„œ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ํ™•์ธ
2. Static Zone ๋˜๋Š” Non-Static Zone์—์„œ ์‹ค์ œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ฐพ์•„์„œ ์‹คํ–‰

์ฆ‰, "๋ฌด์—‡์„ ํ˜ธ์ถœํ•˜๋Š”๊ฐ€" ์™€ "์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ์–ด๋”” ์žˆ๋Š”๊ฐ€" ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.

์ž๊ธฐ ์ ๊ฒ€

  • ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ด์œ ๋Š”?
  • ์ด 2๋‹จ๊ณ„ ๊ตฌ์กฐ๊ฐ€ ๋‹คํ˜•์„ฑ/์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ๋Š”๊ฐ€?

Unit 2.2 โ€” Static vs ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๊ฒฝ๋กœ

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

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

  • Static ๋ฉ”์„œ๋“œ๋ผ๋ฆฌ: Static Zone ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผ (Model1.hap() โ†’ hap() ์œผ๋กœ๋„ ํ˜ธ์ถœ ๊ฐ€๋Šฅ)
  • Static โ†’ ์ธ์Šคํ„ด์Šค: ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ Heap ํ†ตํ•ด ์ ‘๊ทผํ•ด์•ผ ํ•จ
  • ์ธ์Šคํ„ด์Šค๋ผ๋ฆฌ: ๊ฐ™์€ ๊ฐ์ฒด ๋‚ด์—์„œ ์ž์œ ๋กญ๊ฒŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

์ž๊ธฐ ์ ๊ฒ€

  • main() ์•ˆ์—์„œ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š”?
  • ์™œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

Unit 2.3 โ€” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์˜ ์ „ ๊ณผ์ • (Case Study)

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

์ผ€์ด์Šค: Model2 m2 = new Model2(); int sum = m2.hap(1, 2);

ํ˜ธ์ถœ ๊ณผ์ • ์ถ”์ 
1. JVM์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ฝ๊ธฐ โ†’ Class Metadata, Static Zone, Non-Static Zone์— ์ •๋ณด ์ ์žฌ
2. main() ์‹คํ–‰ ์‹œ์ž‘ (Static Zone)
3. new Model2() ๋งŒ๋‚˜๋ฉด:

  • Class Metadata Zone์˜ Model2 ์ •๋ณด ์‚ฌ์šฉ
  • Heap์— Model2 ๊ฐ์ฒด ์ƒ์„ฑ (๊ฐ์ฒด๋Š” Method Area์˜ metadata๋ฅผ ๊ฐ€๋ฆฌํ‚ด)
  • Non-Static Zone์˜ Model2() ์ƒ์„ฑ์ž๊ฐ€ Stack์— ํ˜ธ์ถœ โ†’ ์‹คํ–‰ โ†’ ์ œ๊ฑฐ
  1. Heap ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ€ m2๋กœ main ์Šคํƒ ํ”„๋ ˆ์ž„์— ์ €์žฅ
  2. m2.hap(1, 2):
    • Heap์˜ Model2 ๊ฐ์ฒด โ†’ Method Area์˜ metadata
    • Non-Static Zone์˜ hap() ๋ฐœ๊ฒฌ โ†’ Stack์— ํ˜ธ์ถœ โ†’ ์‹คํ–‰ โ†’ ์ œ๊ฑฐ

์ž๊ธฐ ์ ๊ฒ€

  • ์œ„ 5๋‹จ๊ณ„ ์ค‘ ๊ฐ€์žฅ ๋น„์šฉ์ด ํฐ ๋‹จ๊ณ„๋Š”?
  • ๊ฐ™์€ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ 100๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ๋งค๋ฒˆ metadata ์กฐํšŒ๋ฅผ ํ•˜๋Š”๊ฐ€? (ํžŒํŠธ: JIT)

Unit 2.4 โ€” new ์—ฐ์‚ฐ์ž๊ฐ€ ์‹ค์ œ๋กœ ํ•˜๋Š” ์ผ

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

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

new Model2() ํ•œ ์ค„์ด ํ•˜๋Š” 4๊ฐ€์ง€:
1. Class Metadata Zone์—์„œ Model2 ํด๋ž˜์Šค ์ •๋ณด ์ฐพ๊ธฐ
2. Heap์— ๊ฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ™•๋ณด
3. ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” (์žˆ๋‹ค๋ฉด)
4. ์ƒ์„ฑ์ž(Constructor) ํ˜ธ์ถœ

์ž๊ธฐ ์ ๊ฒ€

  • new ์—†์ด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€? (ํžŒํŠธ: Reflection, clone, deserialization)
  • ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ๊ฐ์ฒด๋Š” ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š”๊ฐ€?

๐Ÿ“š Phase 3 โ€” ๋ฐ”์ดํŠธ์ฝ”๋“œ์™€ ์ƒ์ˆ˜ ํ’€์˜ ์„ธ๊ณ„ (โ˜… 2์ฃผ์ฐจ์˜ ์ •์ )

๋ชฉํ‘œ: .class ํŒŒ์ผ์„ ์ง์ ‘ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. JVM์ด ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ยท๊ด€๋ฆฌํ•˜๋Š”์ง€ ๋ณธ๋‹ค.

Unit 3.1 โ€” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ธ๊ฐ€

์„ ์ˆ˜ ์ง€์‹: Phase 2 ์ „์ฒด

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

  • .java โ†’ javac โ†’ .class (๋ฐ”์ดํŠธ์ฝ”๋“œ)
  • JVM์ด ์ดํ•ดํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ๋น„์Šทํ•œ ๋ช…๋ น์–ด
  • ํ”Œ๋žซํผ ๋…๋ฆฝ์  (์–ด๋А OS์˜ JVM์ด๋“  ๊ฐ™์€ .class ์‹คํ–‰ ๊ฐ€๋Šฅ)
  • ํ™•์ธ ๋ช…๋ น์–ด: javap -c MyClass

์ž๊ธฐ ์ ๊ฒ€

  • ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด์™€ ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€?
  • "Write Once, Run Anywhere"์˜ ๋น„๋ฐ€์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ์— ์–ด๋–ป๊ฒŒ ๋‹ด๊ฒจ์žˆ๋Š”๊ฐ€?

Unit 3.2 โ€” ์ƒ์ˆ˜ ํ’€(Constant Pool)์˜ ์ƒ์„ฑ๊ณผ ๊ตฌ์กฐ

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

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

  • ์ž๋ฐ” ์†Œ์Šค โ†’ ์ปดํŒŒ์ผ ์‹œ์ ์— ํด๋ž˜์Šค ํŒŒ์ผ ๋‚ด๋ถ€์— ์ƒ์ˆ˜ ํ’€ ์ƒ์„ฑ
  • ์ €์žฅ๋˜๋Š” ๊ฒƒ:
    • ๋ฌธ์ž์—ด ์ƒ์ˆ˜
    • ํด๋ž˜์Šค ์ฐธ์กฐ
    • ํ•„๋“œ ์ฐธ์กฐ
    • ๋ฉ”์„œ๋“œ ์ฐธ์กฐ
  • ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ #์ˆซ์ž ํ‘œ๊ธฐ๋Š” ์ƒ์ˆ˜ ํ’€ ์ธ๋ฑ์Šค

์ž๊ธฐ ์ ๊ฒ€

  • ์ƒ์ˆ˜ ํ’€์ด ํด๋ž˜์Šค ํŒŒ์ผ์— ํ•จ๊ป˜ ์ €์žฅ๋˜๋Š” ์ด์œ ๋Š”?
  • ๊ฐ™์€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด ์—ฌ๋Ÿฌ ๊ณณ์— ์“ฐ์ด๋ฉด ์ƒ์ˆ˜ ํ’€์— ๋ช‡ ๋ฒˆ ์ €์žฅ๋˜๋Š”๊ฐ€?

์›๋ณธ ์ž๋ฃŒ: JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ, p.67


Unit 3.3 โ€” ์‹ฌ๋ณผ ์ฐธ์กฐ(Symbolic Reference)

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

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

  • ์ปดํŒŒ์ผ ์‹œ์ ์—” ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ/ํ•„๋“œ์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค
  • ๊ทธ๋ž˜์„œ ์ด๋ฆ„(์‹ฌ๋ณผ) ์œผ๋กœ ์ฐธ์กฐํ•ด๋‘๊ณ , ๋Ÿฐํƒ€์ž„์— ์‹ค์ œ ์œ„์น˜๋กœ ํ•ด์„(resolve)
  • ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ #7 ๊ฐ™์€ ์ธ๋ฑ์Šค โ†’ ์ƒ์ˆ˜ ํ’€์—์„œ "์–ด๋–ค ์‹ฌ๋ณผ์ธ๊ฐ€" ์ฐพ์•„๋ƒ„

์˜ˆ์‹œ: new ๋ช…๋ น

  • ๋ฐ”์ดํŠธ์ฝ”๋“œ: 4: new #7 // class org/example/CalHap
  • #7 = ์ƒ์ˆ˜ ํ’€์˜ 7๋ฒˆ = org/example/CalHap ํด๋ž˜์Šค ์‹ฌ๋ณผ
  • JVM์ด ๋Ÿฐํƒ€์ž„์— ์ด ์‹ฌ๋ณผ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉยทํ•ด์„ยท์ดˆ๊ธฐํ™” ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

์ž๊ธฐ ์ ๊ฒ€

  • ์™œ ์ปดํŒŒ์ผ ์‹œ์ ์— ์‹ค์ œ ์ฃผ์†Œ๋ฅผ ๋ฐ•์•„๋‘์ง€ ์•Š๋Š”๊ฐ€?
  • ์‹ฌ๋ณผ ์ฐธ์กฐ โ†’ ์‹ค์ œ ์ฐธ์กฐ ๋ณ€ํ™˜์€ ์–ธ์ œ ์ผ์–ด๋‚˜๋Š”๊ฐ€?

์›๋ณธ ์ž๋ฃŒ: JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ, p.67


Unit 3.4 โ€” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹ค์ „ ๋ถ„์„

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

์˜ˆ์‹œ ๋ถ„์„

public static void main(String[] args) {
    int a=1, b=1;
    CalHap ch = new CalHap(a, b);
    ch.hap();
}

โ†’ ๋ฐ”์ดํŠธ์ฝ”๋“œ:

0: iconst_1        // a=1
1: istore_1
2: iconst_1        // b=1
3: istore_2
4: new #7          // new CalHap (#7์€ ์ƒ์ˆ˜ ํ’€์˜ CalHap ํด๋ž˜์Šค ์ฐธ์กฐ)
7: dup             // ์Šคํƒ์˜ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณต์ œ
8: iload_1         // a๋ฅผ ์Šคํƒ์—
9: iload_2         // b๋ฅผ ์Šคํƒ์—
10: invokespecial #9   // ์ƒ์„ฑ์ž ํ˜ธ์ถœ
13: astore_3       // ch์— ์ €์žฅ

์ž๊ธฐ ์ ๊ฒ€

  • dup๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€? (ํžŒํŠธ: ์ƒ์„ฑ์ž ํ˜ธ์ถœ ํ›„์—๋„ ch์— ์ €์žฅํ•  ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ ํ•„์š”)
  • invokespecial, invokevirtual, invokestatic์˜ ์ฐจ์ด๋Š”?

๐Ÿ“š Phase 4 โ€” GC ์‹ฌํ™”: G1 GC ๋“ค์—ฌ๋‹ค๋ณด๊ธฐ

๋ชฉํ‘œ: 1์ฃผ์ฐจ์—์„œ ์ด๋ฆ„๋งŒ ๋ดค๋˜ G1 GC๋ฅผ ๋ฆฌ์ „ ๋ชจ๋ธยท์ •์ง€์‹œ๊ฐ„ ์˜ˆ์ธก ๋ชจ๋ธ ๊นŒ์ง€ ์ดํ•ดํ•œ๋‹ค.

Unit 4.1 โ€” ์ฐธ์กฐ ์นด์šดํŒ…์˜ ์น˜๋ช…์  ํ•œ๊ณ„ (์™œ JVM์€ ์•ˆ ์“ฐ๋Š”๊ฐ€)

์„ ์ˆ˜ ์ง€์‹: 1์ฃผ์ฐจ Phase 5

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

  • ์ฐธ์กฐ ์นด์šดํŒ…: ๊ฐ์ฒด๋งˆ๋‹ค ์นด์šดํ„ฐ โ†’ 0์ด๋ฉด ํšŒ์ˆ˜
  • ์žฅ์ : ์ฆ‰์‹œ ํšŒ์ˆ˜ ๊ฐ€๋Šฅ
  • ์น˜๋ช…์  ๋‹จ์ : ์ˆœํ™˜ ์ฐธ์กฐ์—์„œ ๋ˆ„์ˆ˜

์ˆœํ™˜ ์ฐธ์กฐ ์‹œ๋‚˜๋ฆฌ์˜ค:

Root โ†’ A โ‡„ B  (A์™€ B๊ฐ€ ์„œ๋กœ ์ฐธ์กฐ)

Root๊ฐ€ ์ฐธ์กฐ๋ฅผ ๋Š์–ด๋„ Aโ†”B์˜ ์นด์šดํ„ฐ๋Š” 0์ด ์•ˆ ๋จ โ†’ ์˜์›ํžˆ ํšŒ์ˆ˜ ์•ˆ ๋จ โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

์ž๊ธฐ ์ ๊ฒ€

  • JVM์ด ์ฐธ์กฐ ์นด์šดํŒ… ๋Œ€์‹  ์–ด๋–ค ๋ฐฉ์‹์„ ์“ฐ๋Š”๊ฐ€? (ํžŒํŠธ: Reachability Analysis)
  • ์ˆœํ™˜ ์ฐธ์กฐ ์™ธ์— ์ฐธ์กฐ ์นด์šดํŒ…์˜ ๋˜ ๋‹ค๋ฅธ ๋‹จ์ ์€? (ํžŒํŠธ: ์นด์šดํ„ฐ ๊ฐฑ์‹  ๋น„์šฉ)

์›๋ณธ ์ž๋ฃŒ: JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ, p.94


Unit 4.2 โ€” G1 GC์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

์„ ์ˆ˜ ์ง€์‹: Unit 4.1, 1์ฃผ์ฐจ Phase 5

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

  • ์‹œ๋Œ€์  ๋ฐฐ๊ฒฝ: ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ + ๋ฉ€ํ‹ฐ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ ํž™
  • ๊ธฐ์กด GC์˜ ํ•œ๊ณ„: Young/Old๋ฅผ ํ†ต์งธ๋กœ ํšŒ์ˆ˜ โ†’ ํฐ ํž™์—์„œ STW ์‹œ๊ฐ„ ํญ๋ฐœ
  • G1์˜ ๋ชฉํ‘œ: ์ •์ง€์‹œ๊ฐ„ ์˜ˆ์ธก ๋ชจ๋ธ(Pause Prediction Model)
    • "M๋ฐ€๋ฆฌ์ดˆ ์•ˆ์— ๋๋‚ผ๊ฒŒ" ๋ผ๊ณ  ์•ฝ์†ํ•˜๊ณ  ๊ทธ ์•ˆ์— ๋๋ƒ„ (๊ธฐ๋ณธ 200ms)

์ž๊ธฐ ์ ๊ฒ€

  • ํฐ ํž™์—์„œ ๊ธฐ์กด GC๊ฐ€ ๋А๋ฆฐ ๊ทผ๋ณธ ์ด์œ ๋Š”?
  • ์ •์ง€์‹œ๊ฐ„ ์˜ˆ์ธก ๋ชจ๋ธ์€ ์–ด๋–ป๊ฒŒ ์‹œ๊ฐ„์„ ํ†ต์ œํ•˜๋Š”๊ฐ€?

Unit 4.3 โ€” G1 GC์˜ ๋ฆฌ์ „(Region) ๊ธฐ๋ฐ˜ ๋ ˆ์ด์•„์›ƒ

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

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

๊ธฐ์กด GC vs G1:

[๊ธฐ์กด GC]
  โ”Œโ”€ Eden โ”€โ”€โ”ฌโ”€ Survivor โ”€โ”€โ”ฌโ”€โ”€โ”€ Old โ”€โ”€โ”€โ”  โ† ์˜์—ญ ํฌ๊ธฐ ๊ณ ์ •, ์œ„์น˜ ๊ณ ์ •
  โ”‚         โ”‚             โ”‚           โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

[G1 GC]
  โ”Œโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”ฌโ”€โ”
  โ”‚Eโ”‚ โ”‚Sโ”‚Oโ”‚ โ”‚Oโ”‚Eโ”‚ โ”‚ โ”‚Sโ”‚Oโ”‚ โ”‚Eโ”‚  โ† ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋ฆฌ์ „, ์—ญํ• ์€ ๋™์ ์œผ๋กœ ๋ถ€์—ฌ
  โ””โ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”ดโ”€โ”˜
  • ์ž๋ฐ” ํž™์„ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ์—ฌ๋Ÿฌ ๋ฆฌ์ „์œผ๋กœ ๋ถ„ํ• 
  • ๊ฐ ๋ฆฌ์ „์€ ํ•„์š”์— ๋”ฐ๋ผ Eden / Survivor / Old๋กœ ๋™์  ํ• ๋‹น
  • ๋ฆฌ์ „ ํฌ๊ธฐ: 1MB~32MB (2์˜ ์ œ๊ณฑ์ˆ˜), -XX:G1HeapRegionSize ๋กœ ์กฐ์ ˆ

์ž๊ธฐ ์ ๊ฒ€

  • ๋ฆฌ์ „ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ๋Š”๊ฐ€?
  • ๋ฆฌ์ „ ํฌ๊ธฐ๋ฅผ ๋„ˆ๋ฌด ์ž‘๊ฒŒ ํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€?

Unit 4.4 โ€” ๊ฑฐ๋Œ€ ๋ฆฌ์ „(Humongous Region)

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

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

  • ๋ฆฌ์ „ ์šฉ๋Ÿ‰์˜ ์ ˆ๋ฐ˜๋ณด๋‹ค ํฐ ๊ฐ์ฒด = ํฐ ๊ฐ์ฒด = ๊ฑฐ๋Œ€ ๊ฐ์ฒด
  • ํฐ ๊ฐ์ฒด๋Š” ์—ฐ์†๋œ ๊ฑฐ๋Œ€ ๋ฆฌ์ „(Humongous Region) ์— ์ €์žฅ
  • ๊ฑฐ๋Œ€ ๋ฆฌ์ „์€ ์ฃผ๋กœ ๊ตฌ์„ธ๋Œ€(Old) ๋กœ ์ทจ๊ธ‰

์ž๊ธฐ ์ ๊ฒ€

  • ๊ฑฐ๋Œ€ ๊ฐ์ฒด๋ฅผ ๋ณ„๋„ ๋ฆฌ์ „์— ๋‘๋Š” ์ด์œ ๋Š”?
  • ๊ฑฐ๋Œ€ ๊ฐ์ฒด๊ฐ€ ๋งŽ์œผ๋ฉด G1์˜ ํšจ์œจ์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?

Unit 4.5 โ€” G1์˜ ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ํšŒ์ˆ˜

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

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

G1์˜ ํšŒ์ˆ˜ ๊ธฐ์ค€:
1. ์–ด๋А ๋ฆฌ์ „์— ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€๊ฐ€ (ํšŒ์ˆ˜ ๊ฐ€๋Šฅ ๊ณต๊ฐ„ ํฌ๊ธฐ)
2. ํšŒ์ˆ˜์— ๋“œ๋Š” ์‹œ๊ฐ„์ด ์–ผ๋งˆ์ธ๊ฐ€ (๊ฒฝํ—˜๊ฐ’์œผ๋กœ ์˜ˆ์ธก)
3. โ†’ ์ •์ง€์‹œ๊ฐ„ ํ•œ๋„ ๋‚ด์—์„œ ํšŒ์ˆ˜ ํšจ๊ณผ๊ฐ€ ํฐ ๋ฆฌ์ „๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ

์ด๊ฒŒ G1์˜ ์ด๋ฆ„์˜ ์œ ๋ž˜: Garbage First (์“ฐ๋ ˆ๊ธฐ ๋งŽ์€ ๊ณณ ๋จผ์ €)

์ž๊ธฐ ์ ๊ฒ€

  • "์ •์ง€์‹œ๊ฐ„์ด ํ—ˆ์šฉํ•˜๋Š” ํ•œ๋„ ๋‚ด์—์„œ" ๋ผ๋Š” ์ œ์•ฝ์ด ์–ด๋–ป๊ฒŒ ๋ณด์žฅ๋˜๋Š”๊ฐ€?
  • ๋ชจ๋“  ๋ฆฌ์ „์„ ๋‹ค ํšŒ์ˆ˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€์ง€ ์•Š๋Š” ์ด์œ ๋Š”?

๐Ÿ“š Phase 5 โ€” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด๋ถ€ ๊ตฌ์กฐ

๋ชฉํ‘œ: 1์ฃผ์ฐจ์— ArrayList vs LinkedList๋ฅผ ํฐ ๊ทธ๋ฆผ์œผ๋กœ ๋ดค๋‹ค๋ฉด, ์—ฌ๊ธฐ์„œ๋Š” ๋ฐฐ์—ด ํ™•์žฅ ์ •์ฑ…ยท๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ ๋ฅผ ์ฝ”๋“œ๋กœ ๊ฒ€์ฆํ•œ๋‹ค.

Unit 5.1 โ€” List / Set / Map์˜ ๋ณธ์งˆ์  ์ฐจ์ด

์„ ์ˆ˜ ์ง€์‹: 1์ฃผ์ฐจ Phase 6

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

์ž๋ฃŒ๊ตฌ์กฐ์ˆœ์„œ์ค‘๋ณตํ‚ค-๊ฐ’
Listโœ… ์žˆ์Œโœ… ํ—ˆ์šฉโŒ
SetโŒ ์—†์ŒโŒ ๋ถˆํ—ˆโŒ
MapโŒ ์—†์Œํ‚ค โŒ / ๊ฐ’ โœ…โœ…

์ž๊ธฐ ์ ๊ฒ€

  • "์ˆœ์„œ๊ฐ€ ์žˆ๋‹ค"๋Š” ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฐ€? (ํžŒํŠธ: ์‚ฝ์ž… ์ˆœ์„œ vs ์ •๋ ฌ ์ˆœ์„œ)
  • HashSet์€ ์–ด๋–ป๊ฒŒ ์ค‘๋ณต์„ ๋ง‰๋Š”๊ฐ€? (ํžŒํŠธ: HashMap ๋‚ด๋ถ€)

Unit 5.2 โ€” ArrayList ๋‚ด๋ถ€ (๋ฐฐ์—ด ํ™•์žฅ ์ •์ฑ…)

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

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

  • ๊ธฐ๋ณธ ํฌ๊ธฐ 10
  • ๊ณต๊ฐ„ ๋ถ€์กฑ ์‹œ: 1.5๋ฐฐ ํ™•์žฅ โ†’ ์ƒˆ ๋ฐฐ์—ด ์ƒ์„ฑ โ†’ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ
  • ์ค‘๊ฐ„ ์‚ฝ์ž…: ์ƒˆ ๋ฐฐ์—ด ์•ˆ ๋งŒ๋“ฆ, ๊ธฐ์กด ์š”์†Œ๋ฅผ ํ•œ ์นธ์”ฉ ๋ฐ€์–ด๋ƒ„
  • ์ค‘๊ฐ„ ์‚ฝ์ž…/์‚ญ์ œ ๋น„์šฉ: O(n)

์ž๊ธฐ ์ ๊ฒ€

  • new ArrayList<>(1000) ์ฒ˜๋Ÿผ ์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒŒ ์™œ ํšจ์œจ์ ์ธ๊ฐ€?
  • 1.5๋ฐฐ์ธ ์ด์œ ๋Š”? (3๋ฐฐยท2๋ฐฐ๊ฐ€ ์•„๋‹Œ)

์›๋ณธ ์ž๋ฃŒ: ์ž๋ฐ”์˜์‹  2 + ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ ๋ถ„์„


Unit 5.3 โ€” LinkedList ๋‚ด๋ถ€ (๋…ธ๋“œ ์—ฐ๊ฒฐ)

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

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

  • ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์—ฐ๊ฒฐ
  • ๊ฐ ๋…ธ๋“œ: [์ด์ „ ๋…ธ๋“œ ์ฃผ์†Œ | ๋ฐ์ดํ„ฐ | ๋‹ค์Œ ๋…ธ๋“œ ์ฃผ์†Œ]
  • ์ค‘๊ฐ„ ์‚ฝ์ž…/์‚ญ์ œ: ์ฐธ์กฐ๋งŒ ๋ณ€๊ฒฝ โ†’ O(1) (๋‹จ, ์œ„์น˜ ์ฐพ๊ธฐ๋Š” O(n))

์ž๊ธฐ ์ ๊ฒ€

  • ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ฐจ์ด๋Š”?
  • ์ž๋ฐ” LinkedList๋Š” ์–ด๋А ์ชฝ์ธ๊ฐ€?

Unit 5.4 โ€” ์‚ฝ์ž…/์‚ญ์ œ ํšจ์œจ์˜ ์ง„์งœ ์ด์œ  (์ฝ”๋“œ ๊ฒ€์ฆ)

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

ํ•ต์‹ฌ ์งˆ๋ฌธ:

"ArrayList๋„ LinkedList๋„ ๊ฒฐ๊ตญ O(n)์ธ๋ฐ, ์™œ LinkedList๊ฐ€ ์‚ฝ์ž…/์‚ญ์ œ์— ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํ•˜๋Š”๊ฐ€?"

๋‹ต: ๋น„์šฉ์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค.

์ž‘์—…ArrayListLinkedList
์œ„์น˜ ์ฐพ๊ธฐO(1) (์ธ๋ฑ์Šค ์ง์ ‘ ์ ‘๊ทผ)O(n) (์ˆœ์ฐจ ํƒ์ƒ‰)
์‹ค์ œ ์‚ฝ์ž…/์‚ญ์ œO(n) ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌO(1) ์ฐธ์กฐ ๋ณ€๊ฒฝ

๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋น„์šฉ์ด ๋” ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ArrayList์˜ ๋ณต์‚ฌ ๋น„์šฉ์ด ํญ์ฆ.

๊ฒ€์ฆ ์ฝ”๋“œ (์ง์ ‘ ๋Œ๋ ค๋ณด๋ฉด์„œ ์ดํ•ด)

int[] arr = new int[5];
arr[0]=0; arr[1]=1; arr[2]=2; arr[3]=3;

// ์ธ๋ฑ์Šค 1์— 99๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๋ฉด?
// arr[4]=arr[3], arr[3]=arr[2], arr[2]=arr[1], arr[1]=99
// โ†’ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ผ์ด ๋ณต์‚ฌํ•ด์„œ ๋ฐ€์–ด๋‚ธ๋‹ค

์ž๊ธฐ ์ ๊ฒ€

  • "์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค" ๋ฉด LinkedList์˜ ์‚ฝ์ž…์€ ์ •๋ง O(1)์ธ๊ฐ€?
  • ArrayList์—์„œ๋„ ๋์— add๋Š” O(1)์ธ ์ด์œ ๋Š”?

๐Ÿ“š Phase 6 โ€” ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Reflection & Iterator)

๋ชฉํ‘œ: ์ปดํŒŒ์ผ ํƒ€์ž„ ์ •๋ณด๋กœ ๋‹ค ํ’€๋ฆฌ์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋‘ ๊ฐ€์ง€ โ€” ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค ์ •๋ณด ๋‹ค๋ฃจ๊ธฐ, ์ปฌ๋ ‰์…˜ ํ†ตํ•ฉ ์ˆœํšŒ โ€” ์˜ ํ•ด๊ฒฐ์ฑ…์„ ๋ณธ๋‹ค.

Unit 6.1 โ€” ๋ชจ๋“  Object๋Š” metadata๋ฅผ ๊ฐ€์ง„๋‹ค

์„ ์ˆ˜ ์ง€์‹: Phase 1 ์ „์ฒด

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

  • ์ž๋ฐ”์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” Object ๋ฅผ ์ƒ์† โ†’ metadata๋ฅผ ๋™๋ฐ˜
  • ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ •๋ณด: construction(์ƒ์„ฑ์ž), field, method, annotation
  • ์ด ์ •๋ณด๋“ค์€ Class<?> API๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

์ž๊ธฐ ์ ๊ฒ€

  • obj.getClass() ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€?
  • Member.class ์™€ member.getClass() ์˜ ์ฐจ์ด๋Š”?

Unit 6.2 โ€” Reflection์˜ ์šฉ๋„์™€ ์‚ฌ์šฉ๋ฒ•

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

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

  • ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋ณด๊ณ  ๋™์ ์œผ๋กœ ์‚ฌ์šฉ
  • ์ฃผ์š” ์šฉ๋„:
    • ๋Ÿฐํƒ€์ž„์— ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    • private ํ•„๋“œ/๋ฉ”์„œ๋“œ ์ ‘๊ทผ
    • ์–ด๋…ธํ…Œ์ด์…˜ ์ฒ˜๋ฆฌ
  • ์‹ค๋ฌด ์‚ฌ์šฉ์ฒ˜: Spring (DI/AOP), JPA (Entity ๋งคํ•‘), Jackson (JSON ์ง๋ ฌํ™”)

์˜ˆ์‹œ (๊ฐœ๋…)

Class<?> clazz = Class.forName("org.example.Member");
Object obj = clazz.getDeclaredConstructor().newInstance();
Method m = clazz.getMethod("hap", int.class, int.class);
m.invoke(obj, 1, 2);

์ž๊ธฐ ์ ๊ฒ€

  • Reflection์˜ ๋‹จ์ ์€? (ํžŒํŠธ: ์„ฑ๋Šฅ, ์ปดํŒŒ์ผ ํƒ€์ž„ ์•ˆ์ „์„ฑ, ์บก์Аํ™” ์œ„๋ฐ˜)
  • Spring์ด Reflection์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ํ•œ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ผ

Unit 6.3 โ€” Iterator์˜ ํƒ„์ƒ ์ด์œ 

์„ ์ˆ˜ ์ง€์‹: 1์ฃผ์ฐจ Phase 6

ํ•ต์‹ฌ ๋ฌธ์ œ:
Iterator๊ฐ€ ์—†๋˜ ์‹œ์ ˆ, ์ปฌ๋ ‰์…˜๋งˆ๋‹ค ์ˆœํšŒ ๋ฐฉ์‹์ด ๋‹ฌ๋ž๋‹ค.

// ArrayList: ์ธ๋ฑ์Šค ์ˆœํšŒ
for (int i = 0; i < list.size(); i++) { list.get(i); }

// HashSet: ์ธ๋ฑ์Šค๊ฐ€ ์—†์–ด์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹ ํ•„์š”
// LinkedList: ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹

๋ฌธ์ œ์ :

  • ์ปฌ๋ ‰์…˜๋งˆ๋‹ค ์ˆœํšŒ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฆ„ โ†’ ๋น„์ผ๊ด€
  • ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„์•ผ ์ˆœํšŒ ๊ฐ€๋Šฅ โ†’ ์บก์Аํ™” ์œ„๋ฐ˜
  • ์ฝ”๋“œ ์ค‘๋ณต ์ฆ๊ฐ€

์ž๊ธฐ ์ ๊ฒ€

  • HashSet์— ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ์ด์œ ๋Š”?
  • "๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ˆœํšŒ"๋ผ๋Š” ์š”๊ตฌ๊ฐ€ ์–ด๋–ค ๋””์ž์ธ ํŒจํ„ด์„ ๋– ์˜ฌ๋ฆฌ๊ฒŒ ํ•˜๋Š”๊ฐ€?

Unit 6.4 โ€” Iterator ํŒจํ„ด์˜ ์ ์šฉ

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

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

  • ๋ชจ๋“  Collection ์ด iterator() ๋ฉ”์„œ๋“œ ์ œ๊ณต
  • Iterator ์ธํ„ฐํŽ˜์ด์Šค: hasNext(), next(), remove()
  • ์–ด๋–ค ์ปฌ๋ ‰์…˜์ด๋“  ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ์ˆœํšŒ ๊ฐ€๋Šฅ
Collection<String> c = new ArrayList<>();  // ๋˜๋Š” HashSet, LinkedList
Iterator<String> it = c.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}
  • for-each ๋ฌธ์€ ๋‚ด๋ถ€์ ์œผ๋กœ Iterator๋ฅผ ์‚ฌ์šฉ

์ž๊ธฐ ์ ๊ฒ€

  • for-each ์™€ Iterator์˜ ๊ด€๊ณ„๋Š”?
  • ์ˆœํšŒ ๋„์ค‘ ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ฌด์—‡์ด ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? (ํžŒํŠธ: ConcurrentModificationException)

๐Ÿ“š Phase 7 โ€” ๋ณด์กฐ ๊ฐœ๋…: Buffer

๋ชฉํ‘œ: 1์ฃผ์ฐจ์˜ NIO์—์„œ ๋“ฑ์žฅํ–ˆ๋˜ Buffer๋ฅผ ์ข€ ๋” ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•œ๋‹ค.

Unit 7.1 โ€” ๋ฒ„ํผ(Buffer)๋ž€ ๋ฌด์—‡์ธ๊ฐ€

์„ ์ˆ˜ ์ง€์‹: 1์ฃผ์ฐจ Phase 7

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

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
  • ๋‘ ์‹œ์Šคํ…œ ๊ฐ„ ์†๋„ ์ฐจ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์™„์ถฉ์ง€
  • ์˜ˆ: ๋น ๋ฅธ CPU์™€ ๋А๋ฆฐ ๋””์Šคํฌ ์‚ฌ์ด, ๋น ๋ฅธ ๋„คํŠธ์›Œํฌ์™€ ๋А๋ฆฐ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์‚ฌ์ด
  • ์‹ค๋ฌด ๋“ฑ์žฅ:
    • NIO์˜ ByteBuffer
    • BufferedReader / BufferedWriter (I/O ์„ฑ๋Šฅ)
    • ์˜์ƒ/์Œ์„ฑ ์ŠคํŠธ๋ฆฌ๋ฐ์˜ ๋ฒ„ํผ๋ง

์ž๊ธฐ ์ ๊ฒ€

  • ๋ฒ„ํผ๊ฐ€ ์—†์œผ๋ฉด ์–ด๋–ค ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?
  • ๋ฒ„ํผ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด? ๋„ˆ๋ฌด ํฌ๋ฉด?

์›๋ณธ ์ž๋ฃŒ: JVM ๋ฐ‘๋ฐ”๋‹ฅ๊นŒ์ง€ ํŒŒํ—ค์น˜๊ธฐ, p.69


๐ŸŽ“ ์ข…ํ•ฉ ์ž๊ธฐ ์ ๊ฒ€ (2์ฃผ์ฐจ ์กธ์—… ์‹œํ—˜)

JVM ๋ฉ”๋ชจ๋ฆฌ (์‹ฌํ™”)

  1. ์ž๋ฐ” ๋ณ€์ˆ˜ 3์ข…๋ฅ˜์™€ ๊ฐ๊ฐ์˜ ์ €์žฅ ์˜์—ญ์„ ๋งคํ•‘ํ•˜๋ผ
  2. Method Area์˜ 3๊ฐœ ์กด(Class Metadata / Static / Non-Static)์˜ ์—ญํ•  ์ฐจ์ด๋Š”?
  3. main() ์ด Static Zone์— ์žˆ์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š”?
  4. Heap์˜ ๊ฐ์ฒด๊ฐ€ ์ž๊ธฐ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์•„ ํ˜ธ์ถœํ•˜๋Š”๊ฐ€?
  5. Stack์€ ์™œ ์Šค๋ ˆ๋“œ๋ณ„๋กœ ๋”ฐ๋กœ ์žˆ๋Š”๊ฐ€?

๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฉ”์ปค๋‹ˆ์ฆ˜

  1. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์˜ 2๋‹จ๊ณ„(์‹œ๊ทธ๋‹ˆ์ฒ˜ ํ™•์ธ โ†’ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹คํ–‰)๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•˜๋ผ
  2. new Model2() ํ•œ ์ค„์ด JVM์—์„œ ํ•˜๋Š” 4๊ฐ€์ง€๋ฅผ?
  3. Static ๋ฉ”์„œ๋“œ์™€ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ ๊ฒฝ๋กœ ์ฐจ์ด๋Š”?

๋ฐ”์ดํŠธ์ฝ”๋“œ & ์ƒ์ˆ˜ ํ’€

  1. ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ #7 ๊ฐ™์€ ํ‘œ๊ธฐ๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฐ€?
  2. ์ƒ์ˆ˜ ํ’€(Constant Pool)์— ์ €์žฅ๋˜๋Š” ๊ฒƒ 4๊ฐ€์ง€๋Š”?
  3. ์‹ฌ๋ณผ ์ฐธ์กฐ(Symbolic Reference)๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์™œ ํ•„์š”ํ•œ๊ฐ€?
  4. invokespecial ๊ณผ invokevirtual ์˜ ์ฐจ์ด๋Š”?

G1 GC

  1. JVM์ด ์ฐธ์กฐ ์นด์šดํŒ…์„ ์•ˆ ์“ฐ๋Š” ์ด์œ ๋Š”?
  2. G1 GC์˜ "๋ฆฌ์ „(Region)" ๋ชจ๋ธ์ด ๊ธฐ์กด GC์™€ ๋‹ค๋ฅธ ์ ์€?
  3. ๊ฑฐ๋Œ€ ๋ฆฌ์ „(Humongous Region)์€ ์–ธ์ œ ์‚ฌ์šฉ๋˜๋Š”๊ฐ€?
  4. G1์˜ ์ด๋ฆ„์ด "Garbage First"์ธ ์ด์œ ๋Š”?
  5. ์ •์ง€์‹œ๊ฐ„ ์˜ˆ์ธก ๋ชจ๋ธ์€ ์–ด๋–ป๊ฒŒ ์‹œ๊ฐ„์„ ํ†ต์ œํ•˜๋Š”๊ฐ€?

์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€

  1. ArrayList๊ฐ€ 1.5๋ฐฐ๋กœ ํ™•์žฅ๋˜๋Š” ์ •์ฑ…์˜ ์˜๋ฏธ๋Š”?
  2. "์‚ฝ์ž…/์‚ญ์ œ ์‹œ LinkedList๊ฐ€ ์œ ๋ฆฌํ•˜๋‹ค"๋Š” ๋ง์˜ ์ •ํ™•ํ•œ ์˜๋ฏธ๋Š”?
  3. List/Set/Map์˜ ๋ณธ์งˆ์  ์ฐจ์ด๋Š”?

Reflection & Iterator

  1. Reflection์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ 3๊ฐ€์ง€๋Š”?
  2. Spring/JPA/Jackson์ด Reflection์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?
  3. Iterator๊ฐ€ ์—†๋˜ ์‹œ์ ˆ์˜ ๋ฌธ์ œ 2๊ฐ€์ง€๋Š”?
  4. for-each ์™€ Iterator์˜ ๊ด€๊ณ„๋Š”?

Buffer

  1. ๋ฒ„ํผ๊ฐ€ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ๋Š”?

๐Ÿ“Œ ํ•™์Šต ์šด์˜ ํŒ

9-์„น์…˜ ๋งˆ์Šคํ„ฐ ํ”„๋กฌํ”„ํŠธ๋กœ ๊นŠ์ด ํŒŒ์•ผ ํ•  Unit

๋ฐ˜๋“œ์‹œ ๊นŠ์ด ํŒŒ๊ธฐ (๋ฉด์ ‘ ๋‹จ๊ณจ + ์‹ค๋ฌด ์ง๊ฒฐ):

  • Unit 1.3 โ€” Method Area์˜ 3๊ฐœ ์กด
  • Unit 2.3 โ€” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์˜ ์ „ ๊ณผ์ •
  • Unit 3.2 ~ 3.4 โ€” ์ƒ์ˆ˜ ํ’€๊ณผ ์‹ฌ๋ณผ ์ฐธ์กฐ (โ˜…โ˜…โ˜…)
  • Unit 4.3 ~ 4.5 โ€” G1 GC ๋ฆฌ์ „ ๋ชจ๋ธ
  • Unit 6.2 โ€” Reflection (Spring ์ดํ•ด์˜ ์ถœ๋ฐœ์ )

๊ธฐ๋ณธ ์ดํ•ด๋กœ ์ถฉ๋ถ„:

  • Unit 1.6 โ€” Literal Pool (1์ฃผ์ฐจ์—์„œ ๋ณธ ๊ฐœ๋…์˜ ์žฌํ™•์ธ)
  • Unit 7.1 โ€” Buffer (๊ฐœ๋…๋งŒ ์•Œ๋ฉด ๋จ)

Phase๋ณ„ ์ง„๋„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

[ ] Phase 1 โ€” ์ž๋ฐ” ๋ณ€์ˆ˜ โ†” ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ (Unit 1.1~1.6)
[ ] Phase 2 โ€” JVM ๋ฉ”์„œ๋“œ ์‹คํ–‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜ (Unit 2.1~2.4)
[ ] Phase 3 โ€” ๋ฐ”์ดํŠธ์ฝ”๋“œ์™€ ์ƒ์ˆ˜ ํ’€ (Unit 3.1~3.4) โ˜… ์ •์ 
[ ] Phase 4 โ€” G1 GC ์‹ฌํ™” (Unit 4.1~4.5)
[ ] Phase 5 โ€” ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ (Unit 5.1~5.4)
[ ] Phase 6 โ€” Reflection & Iterator (Unit 6.1~6.4)
[ ] Phase 7 โ€” Buffer (Unit 7.1)
[ ] ์ข…ํ•ฉ ์ž๊ธฐ ์ ๊ฒ€ 25๋ฌธํ•ญ ํ†ต๊ณผ

์‹ค์Šต ๋„๊ตฌ

  • javap -c MyClass.class: ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ฝ๊ธฐ
  • javap -v MyClass.class: ์ƒ์ˆ˜ ํ’€๊นŒ์ง€ ๋ณด๊ธฐ
  • java -XX:+PrintGCDetails: GC ๋กœ๊ทธ ํ™•์ธ
  • java -XX:+UseG1GC: G1 GC ๊ฐ•์ œ ํ™œ์„ฑํ™”

ILIC ์‹ค๋ฌด ์—ฐ๊ฒฐ ์ง€์ 

PhaseILIC ์‹ค๋ฌด ์—ฐ๊ฒฐ
1~2 (JVM ๋ฉ”๋ชจ๋ฆฌ/์‹คํ–‰)OOM ๋ถ„์„, heap dump ์ฝ๊ธฐ, ์Šค๋ ˆ๋“œ ๋คํ”„
3 (๋ฐ”์ดํŠธ์ฝ”๋“œ/์ƒ์ˆ˜ ํ’€)Spring AOP ๋™์ž‘ ์ดํ•ด, ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ๋ถ„์„
4 (G1 GC)์šด์˜ ์„œ๋ฒ„ GC ํŠœ๋‹, GC ๋กœ๊ทธ ๋ถ„์„
5 (์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€)DTO/Entity ์ปฌ๋ ‰์…˜ ๋งคํ•‘ ์‹œ ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒ
6 (Reflection)Spring DI, JPA Entity, Jackson DTO ๋งคํ•‘ ์ดํ•ด
6 (Iterator)Stream API์˜ ๊ธฐ๋ฐ˜ (3์ฃผ์ฐจ๋กœ ํ™•์žฅ)
7 (Buffer)ํŒŒ์ผ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ, NIO ํ™œ์šฉ

1์ฃผ์ฐจ โ†’ 2์ฃผ์ฐจ โ†’ 3์ฃผ์ฐจ๋กœ ์—ฐ๊ฒฐ๋  ํ๋ฆ„

  • 1์ฃผ์ฐจ: OOPยทJVMยทGCยท์ปฌ๋ ‰์…˜ยทI/O ๊ฐœ๋ก 
  • 2์ฃผ์ฐจ (์ง€๊ธˆ): JVM ๋‚ด๋ถ€ยท๋ฐ”์ดํŠธ์ฝ”๋“œยทG1 GCยท์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ยทReflectionยทIterator
  • 3์ฃผ์ฐจ ์˜ˆ์ƒ: Stream API (Iterator์˜ ์ง„ํ™”), ๋žŒ๋‹ค์™€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ œ๋„ค๋ฆญ ์‹ฌํ™”, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ
profile
Software Developer

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