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

3์ฃผ์ฐจ ์ž๋ฃŒ์˜ ๋ชจ๋“  ํ† ํ”ฝ์„ "๊ธฐ์ดˆ โ†’ ์‘์šฉ โ†’ ์‹ค์ „" ์ˆœ์„œ๋กœ ์žฌ๋ฐฐ์—ดํ•œ ํ•™์Šต ๊ฒฝ๋กœ.
1ยท2์ฃผ์ฐจ์—์„œ ์ปฌ๋ ‰์…˜ยทI/O๋ฅผ ๊ฐœ๋ก ยท๋‚ด๋ถ€ ๊ตฌ์กฐ ์ˆ˜์ค€์œผ๋กœ ๋ดค๋‹ค๋ฉด,
3์ฃผ์ฐจ๋Š” ์ „์ฒด ๋ถ„๋ฅ˜ ์ง€๋„ + ์ƒˆ ๋„๊ตฌ(์ œ๋„ค๋ฆญ/์™€์ผ๋“œ์นด๋“œ/๋žŒ๋‹ค/์ŠคํŠธ๋ฆผ) ๊นŒ์ง€ ํ™•์žฅํ•œ๋‹ค.


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

[Phase 1] Pass by Value ์ง„์งœ ์ดํ•ด (C ํฌ์ธํ„ฐ๋ถ€ํ„ฐ)
   โ†“
[Phase 2] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ „์ฒด ์ง€๋„
   โ†“                      โ†“
[Phase 3] ํ•ด์‹œ ์›๋ฆฌ   [Phase 4] ์ถ”์ƒํ™” ๋„๊ตฌ (์ถ”์ƒํด๋ž˜์Šค vs ์ธํ„ฐํŽ˜์ด์Šค)
   โ†“                      โ†“
[Phase 5] ์ œ๋„ค๋ฆญ๊ณผ ์™€์ผ๋“œ์นด๋“œ
   โ†“
[Phase 6] ๊ฐ์ฒด ๋น„๊ต โ€” Comparable & Comparator
   โ†“
[Phase 7] I/O ์‹œ์Šคํ…œ ํฐ ๊ทธ๋ฆผ (IO vs NIO)
   โ†“
[Phase 8] Stream ์‹ค์ „ (InputStream/OutputStream/Reader/Writer)
   โ†“
[Phase 9] I/O ๊ฐ•ํ™” (Buffered/Data/Serialization)
   โ†“
[Phase 10] ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ โ€” ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ

์ด 10 Phase ร— 43 Unit โ€” ๋ถ„๋Ÿ‰์ด ๋งŽ์•„ ํ‰์ผ 1์‹œ๊ฐ„ ร— 2์ฃผ ๋˜๋Š” ์••์ถ• 7์ผ ์ผ์ • ๊ฐ€๋Šฅ.

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

์˜์—ญ1์ฃผ์ฐจ (๊ฐœ๋ก )2์ฃผ์ฐจ (๋‚ด๋ถ€)3์ฃผ์ฐจ (์ „์ฒด ์ง€๋„ + ์‹ ๊ทœ)
Pass by value์ž๋ฐ”๋Š” ํ•ญ์ƒ ๊ฐ’ ๋ณต์‚ฌ(์—†์Œ)C ํฌ์ธํ„ฐ๋กœ ๋น„๊ต + ๊ฐ์ฒด ๋งค๊ฐœ๋ณ€์ˆ˜ 2๊ฐ€์ง€ ํŒจํ„ด
์ปฌ๋ ‰์…˜ArrayList vs LinkedList๋ฐฐ์—ด ํ™•์žฅ ์ •์ฑ…List/Set/Queue/Map 5๊ณ„์ธต ๋ชจ๋‘ + Vector, HashTable, ConcurrentHashMap
ํ•ด์‹œLoadFactor 0.75(์—†์Œ)ํ•ด์‹œ ํ•จ์ˆ˜ยท์ถฉ๋Œยท์ฒด์ด๋‹ยท์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ ์ง์ ‘ ๊ตฌํ˜„
I/O๊ฐœ๋… + try-with-resources(์—†์Œ)Stream vs Channel, Blocking vs Non-blocking, BufferedStream, DataStream, ObjectStream
์‹ ๊ทœโ€”Reflection, Iterator์ œ๋„ค๋ฆญ/์™€์ผ๋“œ์นด๋“œ, Comparable/Comparator, ๋žŒ๋‹ค, ์ŠคํŠธ๋ฆผ

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

DayPhaseํ•™์Šต ๋ชฉํ‘œ
1์ผ์ฐจPhase 1 + 2Pass by value ๋งˆ๋ฌด๋ฆฌ + ์ปฌ๋ ‰์…˜ ์ „์ฒด ์ง€๋„
2์ผ์ฐจPhase 3 + 4ํ•ด์‹œ ์›๋ฆฌ + ์ถ”์ƒํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค
3์ผ์ฐจPhase 5 + 6์ œ๋„ค๋ฆญ/์™€์ผ๋“œ์นด๋“œ/PECS + ๊ฐ์ฒด ๋น„๊ต
4์ผ์ฐจPhase 7I/O ์‹œ์Šคํ…œ ํฐ ๊ทธ๋ฆผ
5์ผ์ฐจPhase 8Stream ์‹ค์ „ ์ฝ”๋”ฉ
6์ผ์ฐจPhase 9Buffered/Data/Serialization
7์ผ์ฐจPhase 10๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ ํ•จ์ˆ˜ํ˜•

์—ฌ์œ  ์ผ์ • (14์ผ): ๊ฐ Phase๋ฅผ 1~2์ผ์”ฉ ๋ฐฐ์ •ํ•˜๋ฉด ์ฝ”๋“œ ์‹ค์Šต๊นŒ์ง€ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅ.


๐Ÿ“š Phase 1 โ€” Pass by Value์˜ ์ง„์งœ ์ดํ•ด

๋ชฉํ‘œ: 1์ฃผ์ฐจ์—์„œ ๋ณธ "Java๋Š” ํ•ญ์ƒ ๊ฐ’ ๋ณต์‚ฌ"์˜ ์˜๋ฏธ๋ฅผ C ํฌ์ธํ„ฐ์™€ ๋น„๊ต ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ๋ฒจ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€ ์ดํ•ดํ•œ๋‹ค.

Unit 1.1 โ€” C ํฌ์ธํ„ฐ ๊ธฐ์ดˆ

์„ ์ˆ˜ ์ง€์‹: 1์ฃผ์ฐจ Phase 4 (JVM ๋ฉ”๋ชจ๋ฆฌ)

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

  • * ๊ฐ€ ๋ถ™์€ ๋ณ€์ˆ˜ = ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜
  • ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”: int *p = &a; (์ •์ˆ˜ ๋ณ€์ˆ˜ a์˜ ์ฃผ์†Œ๋ฅผ p์— ์ €์žฅ)
  • ๊ฐ’ ๊บผ๋‚ด๊ธฐ: *p (์—ญ์ฐธ์กฐ โ€” p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์˜ ์‹ค์ œ ๊ฐ’)
  • C๋Š” ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค

์ž๊ธฐ ์ ๊ฒ€

  • &a ์™€ *p ์˜ ์˜๋ฏธ ์ฐจ์ด๋Š”?
  • C์—์„œ ํฌ์ธํ„ฐ๋ฅผ ์ž˜๋ชป ๋‹ค๋ฃจ๋ฉด ์–ด๋–ค ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

Unit 1.2 โ€” Pass by value vs Pass by reference

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

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

  • Pass by value: ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ์ „๋‹ฌ โ†’ ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ ๋‚ด ๋ณ€๊ฒฝ์ด ์›๋ณธ์— ์˜ํ–ฅ ์—†์Œ
  • Pass by reference (C++ ๋“ฑ): ๋ณ€์ˆ˜ ์ž์ฒด์˜ ๋ณ„์นญ(์ฃผ์†Œ)์„ ์ „๋‹ฌ โ†’ ๋ณ€๊ฒฝ์ด ์›๋ณธ์— ๋ฐ˜์˜
  • ์ž๋ฐ”๋Š” Pass by value๋งŒ ์กด์žฌ

์ž๊ธฐ ์ ๊ฒ€

  • C++์˜ reference์™€ C์˜ ํฌ์ธํ„ฐ๋Š” ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ฐ€?
  • ์ง„์ •ํ•œ pass by reference ์–ธ์–ด์—์„œ ๋ณ€์ˆ˜ ์ž์ฒด๊ฐ€ ์ƒˆ ๊ฐ์ฒด๋กœ ์žฌํ• ๋‹น๋˜๋ฉด ํ˜ธ์ถœ์ž์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”๊ฐ€?

Unit 1.3 โ€” ์ž๋ฐ”์˜ Call by Value ํ•œ ๊ฐ€์ง€

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

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

์ž๋ฐ” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•ญ์ƒ ๊ฐ’ ๋ณต์‚ฌ:

  • ์›์‹œ ํƒ€์ž…: ๊ฐ’ ์ž์ฒด ๋ณต์‚ฌ
  • ๊ฐ์ฒด ํƒ€์ž…: Heap์˜ ์ฃผ์†Œ๊ฐ’์ด ๋ณต์‚ฌ (ํฌ์ธํ„ฐ ๋น„์Šทํ•˜์ง€๋งŒ ์ง์ ‘ ์กฐ์ž‘ ๋ถˆ๊ฐ€)

ํ•ต์‹ฌ ํŒจํ„ด 2๊ฐ€์ง€:

static void modify(MyObject obj) {
    obj.value = 20;        // โœ… ๊ฐ™์€ ๊ฐ์ฒด์˜ ํ•„๋“œ ๋ณ€๊ฒฝ โ†’ ํ˜ธ์ถœ์ž์— ๋ฐ˜์˜
    obj = new MyObject(30); // โŒ ์ง€์—ญ๋ณ€์ˆ˜ obj๊ฐ€ ์ƒˆ ๊ฐ์ฒด ๊ฐ€๋ฆฌํ‚ด โ†’ ํ˜ธ์ถœ์ž ๋ฌด๊ด€
}

์ž๊ธฐ ์ ๊ฒ€

  • "์ฃผ์†Œ๊ฐ’์ด ๋ณต์‚ฌ๋œ๋‹ค"์™€ "Pass by reference"์˜ ์ฐจ์ด๋Š”?
  • arg2 = arg1 (run ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ) ์ด ํ˜ธ์ถœ์ž์— ์˜ํ–ฅ์„ ๋ชป ์ฃผ๋Š” ์ด์œ ๋Š”?

์›๋ณธ ์ž๋ฃŒ: 3์ฃผ์ฐจ, Java Call by Value ์˜ˆ์ œ


๐Ÿ“š Phase 2 โ€” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ „์ฒด ์ง€๋„

๋ชฉํ‘œ: 1ยท2์ฃผ์ฐจ์—์„œ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณธ ์ปฌ๋ ‰์…˜์„ List/Set/Queue/Map 4๋Œ€ ๊ณ„์—ด์˜ ์ „์ฒด ์ง€๋„ ๋กœ ํ™•์žฅํ•œ๋‹ค.

Unit 2.1 โ€” ๋ฐฐ์—ด์˜ ํ•œ๊ณ„์™€ ์ปฌ๋ ‰์…˜์˜ ๋“ฑ์žฅ

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

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

  • ๋ฐฐ์—ด์˜ ๋ถˆํŽธํ•จ:
    • ํฌ๊ธฐ ์ง€์ • ํ›„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
    • ์ค‘๊ฐ„ ์‚ฝ์ž…/์‚ญ์ œ ๋ฉ”์„œ๋“œ ์—†์Œ
  • Collection = ์ž๋ฃŒ๊ตฌ์กฐ + ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํด๋ž˜์Šค๋กœ ๊ตฌ์กฐํ™”
  • Collection ์ธํ„ฐํŽ˜์ด์Šค: List, Set, Queue๊ฐ€ ์ƒ์†
  • Map์€ ๋ณ„๋„ (key-value ๊ตฌ์กฐ)

์ž๊ธฐ ์ ๊ฒ€

  • ๋ฐฐ์—ด๋„ ๊ฐ€๋Šฅํ•œ ์ž‘์—…์„ ๊ตณ์ด ์ปฌ๋ ‰์…˜์œผ๋กœ ํ•˜๋Š” ์ด์œ ๋Š”?
  • Map์ด Collection์„ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š”?

Unit 2.2 โ€” Set 3ํ˜•์ œ (HashSet / TreeSet / LinkedHashSet)

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

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

๊ตฌํ˜„์ฒดํŠน์ง•๋‚ด๋ถ€ ๊ตฌ์กฐ
HashSet์ˆœ์„œ ๋ณด์žฅ X, ์ค‘๋ณต XHashMap ๊ธฐ๋ฐ˜
TreeSet์ž๋™ ์ •๋ ฌ(0-9, A-Z, a-z), ์ค‘๋ณต XRed-Black Tree
LinkedHashSet์‚ฝ์ž… ์ˆœ์„œ ์œ ์ง€, ์ค‘๋ณต XHashMap + LinkedList

์ž๊ธฐ ์ ๊ฒ€

  • HashSet์€ ์–ด๋–ป๊ฒŒ ์ค‘๋ณต์„ ๊ฒ€์‚ฌํ•˜๋Š”๊ฐ€? (ํžŒํŠธ: hashCode + equals)
  • TreeSet์˜ ์‚ฝ์ž… ๋น„์šฉ์€? (ํžŒํŠธ: O(log n))

Unit 2.3 โ€” List 3ํ˜•์ œ (ArrayList / LinkedList / Vector)

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

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

๊ตฌํ˜„์ฒด๋‚ด๋ถ€Thread Safe๋น„๊ณ 
ArrayList๋ฐฐ์—ด (1.5๋ฐฐ ํ™•์žฅ)โŒ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์”€
LinkedList์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธโŒQueue ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„
Vector๋ฐฐ์—ด (ArrayList์™€ ๋™์ผ)โœ… (synchronized)๋™๊ธฐํ™”๋กœ ์ธํ•ด ๋А๋ฆผ, ๊ฑฐ์˜ ์•ˆ ์”€
  • LinkedList๋Š” ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ โ†’ ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰ ๊ฐ€๋Šฅ
  • LinkedList๊ฐ€ List + Queue ๋‘˜ ๋‹ค ๊ตฌํ˜„ โ†’ Queue ์šฉ๋„๋กœ ์ž์ฃผ ์“ฐ์ž„

์ž๊ธฐ ์ ๊ฒ€

  • Vector๊ฐ€ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š”? (ํžŒํŠธ: ๋” ๋‚˜์€ ๋Œ€์•ˆ)
  • LinkedList๋ฅผ Queue๋กœ ์“ธ ๋•Œ์˜ ์žฅ์ ์€?

Unit 2.4 โ€” Queue (FIFO ์ž๋ฃŒ๊ตฌ์กฐ)

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

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

  • FIFO (First In First Out) ๊ตฌ์กฐ
  • null ์‚ฝ์ž… ๋ถˆ๊ฐ€
  • ์‚ฌ์šฉ์ฒ˜: BFS ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, ์ปดํ“จํ„ฐ ๋ฒ„ํผ, ๋ฉ”์‹œ์ง€ ํ(MQ)

์ฃผ์š” ๋ฉ”์„œ๋“œ ํŽ˜์–ด:

๋™์ž‘์•ˆ์ „ (์‹คํŒจ ์‹œ false/null)๊ฐ•์ œ (์‹คํŒจ ์‹œ ์˜ˆ์™ธ)
์‚ฝ์ž…offer()add()
์กฐํšŒpeek()element()
์ œ๊ฑฐpoll()remove()

์˜ˆ์‹œ

Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.poll();  // 1 ๋ฐ˜ํ™˜ ํ›„ ์ œ๊ฑฐ
queue.peek();  // 2 (์ œ๊ฑฐ ์•ˆ ํ•จ)

์ž๊ธฐ ์ ๊ฒ€

  • add() ์™€ offer() ์˜ ์ฐจ์ด๋Š”?
  • LinkedList๋กœ Queue๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ArrayDeque๋ฅผ ๊ถŒ์žฅํ•˜๋Š” ์ด์œ ๋Š”?

Unit 2.5 โ€” Map 5ํ˜•์ œ

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

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

๊ตฌํ˜„์ฒด์ˆœ์„œnull ํ—ˆ์šฉThread Safe
HashMapโŒํ‚ค 1๊ฐœ, ๊ฐ’ ๋‹ค์ˆ˜โŒ
LinkedHashMapโœ… ์‚ฝ์ž…์ˆœHashMap๊ณผ ๋™์ผโŒ
TreeMapโœ… ํ‚ค ์ •๋ ฌ๊ฐ’๋งŒ (ํ‚ค๋Š” โŒ)โŒ
HashTableโŒโŒ (ํ‚คยท๊ฐ’ ๋ชจ๋‘)โœ… (๋ฉ”์„œ๋“œ ๋™๊ธฐํ™”)
ConcurrentHashMapโŒโŒโœ… (๋™์‹œ์„ฑ ์ตœ์ ํ™”)
  • TreeMap ์ •๋ ฌ ์ˆœ์„œ: ์ˆซ์ž โ†’ ๋Œ€๋ฌธ์ž โ†’ ์†Œ๋ฌธ์ž โ†’ ํ•œ๊ธ€
  • HashTable์€ ๊ฑฐ์˜ ์•ˆ ์“ฐ๊ณ  ConcurrentHashMap ๊ถŒ์žฅ

์ž๊ธฐ ์ ๊ฒ€

  • HashMap์ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์— ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š”?
  • ConcurrentHashMap์ด HashTable๋ณด๋‹ค ๋น ๋ฅธ ์ด์œ ๋Š”? (ํžŒํŠธ: ๋ฝ ๋‹จ์œ„)

Unit 2.6 โ€” ์ปฌ๋ ‰์…˜ ์ „์ฒด ์ง€๋„ ์ •๋ฆฌ

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

์ „์ฒด ๊ณ„์ธต:

Collection โ”€โ”ฌโ”€ List โ”€โ”€โ”ฌโ”€ ArrayList
            โ”‚         โ”œโ”€ LinkedList
            โ”‚         โ””โ”€ Vector
            โ”œโ”€ Set โ”€โ”€โ”ฌโ”€ HashSet
            โ”‚        โ”œโ”€ TreeSet
            โ”‚        โ””โ”€ LinkedHashSet
            โ””โ”€ Queue โ”€โ”ฌโ”€ LinkedList (List๋„ ๊ตฌํ˜„)
                      โ”œโ”€ ArrayDeque
                      โ””โ”€ PriorityQueue

Map (Collection X) โ”€โ”ฌโ”€ HashMap
                    โ”œโ”€ LinkedHashMap
                    โ”œโ”€ TreeMap
                    โ”œโ”€ HashTable
                    โ””โ”€ ConcurrentHashMap

์ž๊ธฐ ์ ๊ฒ€

  • "์ •๋ ฌ๋œ ํ‚ค"๊ฐ€ ํ•„์š”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š”? (TreeMap ํ›„๋ณด)
  • "์‚ฝ์ž… ์ˆœ์„œ ์œ ์ง€ + ์ค‘๋ณต ์ œ๊ฑฐ"๊ฐ€ ํ•„์š”ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š”? (LinkedHashSet ํ›„๋ณด)

๐Ÿ“š Phase 3 โ€” ํ•ด์‹œ(Hash)์˜ ์›๋ฆฌ

๋ชฉํ‘œ: HashMapยทHashSet์˜ ๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด์„œ ์ดํ•ดํ•œ๋‹ค.

Unit 3.1 โ€” ํ•ด์‹œ์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ

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

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

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์œผ๋ฉด ์ˆœ์ฐจ ๊ฒ€์ƒ‰์€ O(n) โ†’ ๋„ˆ๋ฌด ๋А๋ฆผ
  • ์งˆ๋ฌธ: "์ˆ˜ํ•™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ์œ„์น˜๋ฅผ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์—†์„๊นŒ?"
  • ๋‹ต: ํ•ด์‹œ ํ•จ์ˆ˜ (key โ†’ ์ •์ˆ˜ ์ธ๋ฑ์Šค)

์˜ˆ์‹œ ํ•ด์‹œ ํ•จ์ˆ˜:

ํ•ด์‹œ๊ฐ’ = ์ด๋ฆ„์˜ ์ฒซ ๊ธ€์ž ASCII % 10
Alice โ†’ 65 % 10 = 5  (์œ„์น˜ 5์— ์ €์žฅ)
Bob   โ†’ 66 % 10 = 6  (์œ„์น˜ 6์— ์ €์žฅ)

์ž๊ธฐ ์ ๊ฒ€

  • ํ•ด์‹œ ๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š”? (์ด์ƒ์  ์ผ€์ด์Šค)
  • ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์ข‹์€ ์กฐ๊ฑด 3๊ฐ€์ง€๋Š”? (ํžŒํŠธ: ๋น ๋ฆ„, ๊ท ๋“ฑ ๋ถ„ํฌ, ๊ฒฐ์ •์ )

Unit 3.2 โ€” ํ•ด์‹œ ์ถฉ๋Œ(Hash Collision)

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

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

  • ์„œ๋กœ ๋‹ค๋ฅธ ์ž…๋ ฅ์ด ๊ฐ™์€ ํ•ด์‹œ๊ฐ’ ์„ ๊ฐ€์ง€๋Š” ์ƒํ™ฉ
  • ์œ ํ•œํ•œ ์ถœ๋ ฅ ํฌ๊ธฐ โ†’ ์ž…๋ ฅ์ด ๋งŽ์œผ๋ฉด ์ถฉ๋Œ์€ ๋ถˆ๊ฐ€ํ”ผ
  • ์ถฉ๋Œ์ด ์žฆ์œผ๋ฉด ํ•ด์‹œ์˜ ์žฅ์ (O(1)) ๋ฌด๋„ˆ์ง โ†’ ์ตœ์•… O(n)

์ž๊ธฐ ์ ๊ฒ€

  • ๋น„๋‘˜๊ธฐ์ง‘ ์›๋ฆฌ(Pigeonhole Principle)์™€ ํ•ด์‹œ ์ถฉ๋Œ์˜ ๊ด€๊ณ„๋Š”?
  • ์ถฉ๋Œ์ด ์ ˆ๋Œ€ ์•ˆ ๋‚˜๋Š” ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€? (ํžŒํŠธ: Perfect Hashing)

Unit 3.3 โ€” ์ถฉ๋Œ ํ•ด๊ฒฐ๋ฒ• 1: ์ฒด์ด๋‹(Chaining)

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

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

  • ๊ฐ™์€ ์ธ๋ฑ์Šค์— ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ
  • Index 5 โ†’ [("Alice", 1234), ("Alex", 5678)]
  • Java 8๋ถ€ํ„ฐ ํ•œ ๋ฒ„ํ‚ท์˜ ํ•ญ๋ชฉ์ด 8๊ฐœ ๋„˜์œผ๋ฉด ํŠธ๋ฆฌ(Red-Black)๋กœ ๋ณ€ํ™˜

ํ•ต์‹ฌ ๋™์ž‘ (์ง์ ‘ ๊ตฌํ˜„):

  • put: ํ•ด์‹œ๊ฐ’ ๊ณ„์‚ฐ โ†’ ๋ฒ„ํ‚ท โ†’ ํ‚ค ์กด์žฌํ•˜๋ฉด ๊ฐฑ์‹ , ์—†์œผ๋ฉด ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
  • get: ํ•ด์‹œ๊ฐ’ ๊ณ„์‚ฐ โ†’ ๋ฒ„ํ‚ท ํƒ์ƒ‰ โ†’ ํ‚ค ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ ๋ฐ˜ํ™˜

์ž๊ธฐ ์ ๊ฒ€

  • ์ฒด์ด๋‹์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ตœ์•…์ผ ๋•Œ O(n)์ธ ์ด์œ ๋Š”?
  • Java 8์˜ ํŠธ๋ฆฌ ๋ณ€ํ™˜์€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€?

Unit 3.4 โ€” ์ถฉ๋Œ ํ•ด๊ฒฐ๋ฒ• 2: ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ(Open Addressing)

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

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

  • ์ถฉ๋Œ ์‹œ ๋นˆ ๋ฒ„ํ‚ท์„ ์ฐพ์•„ ์ €์žฅ
  • ํƒ์‚ฌ ๋ฐฉ์‹: ์„ ํ˜• ํƒ์‚ฌ, ์ด์ฐจ ํƒ์‚ฌ, ์ด์ค‘ ํ•ด์‹ฑ
  • ๋ณ„๋„ ์ž๋ฃŒ๊ตฌ์กฐ ๋ถˆํ•„์š” โ†’ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ โ†‘
  • ๋‹จ์ : ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฐœ์ƒ ๊ฐ€๋Šฅ

์ž๊ธฐ ์ ๊ฒ€

  • ์ฒด์ด๋‹๊ณผ ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ ์ค‘ ์ž๋ฐ” HashMap์ด ์ฑ„ํƒํ•œ ๋ฐฉ์‹์€?
  • ์‚ญ์ œ๊ฐ€ ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ์—์„œ ๊นŒ๋‹ค๋กœ์šด ์ด์œ ๋Š”? (ํžŒํŠธ: ํƒ์‚ฌ ์ฒด์ธ)

๐Ÿ“š Phase 4 โ€” ์ถ”์ƒํ™”์˜ ๋‘ ๋„๊ตฌ (์ถ”์ƒํด๋ž˜์Šค vs ์ธํ„ฐํŽ˜์ด์Šค)

๋ชฉํ‘œ: ๋‘ ์ถ”์ƒํ™” ๋„๊ตฌ์˜ ์ •ํ™•ํ•œ ์ฐจ์ด์™€ ์„ ํƒ ๊ธฐ์ค€์„ ์žก๋Š”๋‹ค.

Unit 4.1 โ€” ์ถ”์ƒํด๋ž˜์Šค์˜ ํŠน์ง•

์„ ์ˆ˜ ์ง€์‹: 1์ฃผ์ฐจ Phase 2 (์ƒ์†)

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

  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ(๊ตฌํ˜„ ์—†๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ 1๊ฐœ๋ผ๋„ ์žˆ์œผ๋ฉด abstract ๋ช…์‹œ
  • ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๋„ ํฌํ•จ ๊ฐ€๋Šฅ
  • ๋‹จ์ผ ์ƒ์†๋งŒ
  • ์ƒ์„ฑ์ž ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ (๋‹จ, ์ง์ ‘ ์ธ์Šคํ„ด์Šคํ™”๋Š” ๋ถˆ๊ฐ€)

์ž๊ธฐ ์ ๊ฒ€

  • ์ถ”์ƒํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์–ธ์ œ ํ˜ธ์ถœ๋˜๋Š”๊ฐ€?
  • "๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๋„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค"๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค ๋Œ€๋น„ ์–ด๋–ค ์ด์ ์„ ์ฃผ๋Š”๊ฐ€?

Unit 4.2 โ€” ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŠน์ง•

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

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

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ ์—†์Œ (Java 8 ์ „)
  • ๋‹ค์ค‘ ์ƒ์†(๊ตฌํ˜„) ๊ฐ€๋Šฅ
  • ์ƒ์„ฑ์ž ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ
  • ํ•„๋“œ๋Š” ์ž๋™์œผ๋กœ public static final ์ƒ์ˆ˜
    interface Constants {
        int MAX_VALUE = 100;  // = public static final int MAX_VALUE = 100;
    }

์ž๊ธฐ ์ ๊ฒ€

  • ์ธํ„ฐํŽ˜์ด์Šค ํ•„๋“œ๊ฐ€ public static final ์ธ ์ด์œ ๋Š”?
  • ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋ฉด ๋ฌด์—‡์ด ํ˜ธ์ถœ๋˜๋Š”๊ฐ€?

Unit 4.3 โ€” Java 8 default & static ๋ฉ”์„œ๋“œ

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

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

  • Java 8๋ถ€ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค์— ๊ตฌํ˜„ ํฌํ•จ ๋ฉ”์„œ๋“œ ๊ฐ€๋Šฅ
    • default ๋ฉ”์„œ๋“œ: ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ํ˜ธ์ถœ
    • static ๋ฉ”์„œ๋“œ: ์ธํ„ฐํŽ˜์ด์Šค๋ช…์œผ๋กœ ํ˜ธ์ถœ
  • ๋“ฑ์žฅ ์ด์œ : ๊ธฐ์กด ์ธํ„ฐํŽ˜์ด์Šค์— ์ƒˆ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ์‹œ ๋ชจ๋“  ๊ตฌํ˜„์ฒด๊ฐ€ ๊นจ์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
interface Vehicle {
    void move();
    default void start() { System.out.println("starting"); }
    static void stop() { System.out.println("stopped"); }
}

์ž๊ธฐ ์ ๊ฒ€

  • default ๋ฉ”์„œ๋“œ ๋„์ž… ์ด์ „์—” ์ธํ„ฐํŽ˜์ด์Šค ์ง„ํ™”๊ฐ€ ์™œ ์–ด๋ ค์› ๋Š”๊ฐ€?
  • ์ถ”์ƒํด๋ž˜์Šค vs ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•ด์ง„ ์ด์œ ๋Š”?

Unit 4.4 โ€” ์ถ”์ƒํด๋ž˜์Šค vs ์ธํ„ฐํŽ˜์ด์Šค ์„ ํƒ ๊ธฐ์ค€

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

ํ•ต์‹ฌ ๋น„๊ตํ‘œ:

ํ•ญ๋ชฉ์ถ”์ƒํด๋ž˜์Šค์ธํ„ฐํŽ˜์ด์Šค
๋‹ค์ค‘ ์ƒ์†โŒโœ…
๊ตฌํ˜„ ๋ฉ”์„œ๋“œโœ…Java 8+ default๋งŒ
ํ•„๋“œ์ž์œ public static final ๋งŒ
์ƒ์„ฑ์žโœ…โŒ
์‚ฌ์šฉ ์˜๋„"is-a" ๊ฐ•ํ•œ ๊ด€๊ณ„"can-do" ๋Šฅ๋ ฅ

์„ ํƒ ๊ฐ€์ด๋“œ:

  • ๊ณตํ†ต ์ƒํƒœ + ๊ณตํ†ต ๊ตฌํ˜„์ด ์žˆ๋Š” ๊ณ„์ธต: ์ถ”์ƒํด๋ž˜์Šค
  • ์—ฌ๋Ÿฌ ๋Šฅ๋ ฅ์˜ ์กฐํ•ฉ์ด ํ•„์š”: ์ธํ„ฐํŽ˜์ด์Šค
  • ๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ์šฐ์„  (Spring, JPA ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค ์šฐ์„ )

์ž๊ธฐ ์ ๊ฒ€

  • List ์ธํ„ฐํŽ˜์ด์Šค์™€ AbstractList ์ถ”์ƒํด๋ž˜์Šค๊ฐ€ ๋‘˜ ๋‹ค ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š”?

๐Ÿ“š Phase 5 โ€” ์ œ๋„ค๋ฆญ๊ณผ ์™€์ผ๋“œ์นด๋“œ

๋ชฉํ‘œ: ์ œ๋„ค๋ฆญ์˜ ๋ถˆ๊ณต๋ณ€์„ฑ์„ ์ดํ•ดํ•˜๊ณ  PECS ์›์น™์œผ๋กœ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์ž์œ ์ž์žฌ๋กœ ์“ด๋‹ค.

Unit 5.1 โ€” ์ œ๋„ค๋ฆญ์˜ ๋ถˆ๊ณต๋ณ€์„ฑ(Invariance)

์„ ์ˆ˜ ์ง€์‹: Phase 4

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

  • String์€ Object์˜ ์ž์‹ โ†’ String[]์€ Object[]๋กœ ์ทจ๊ธ‰ ๊ฐ€๋Šฅ (๋ฐฐ์—ด์€ ๊ณต๋ณ€)
  • ํ•˜์ง€๋งŒ List<String>์€ List<Object>๋กœ ์ทจ๊ธ‰ ๋ถˆ๊ฐ€ (์ œ๋„ค๋ฆญ์€ ๋ถˆ๊ณต๋ณ€)
    List<String> stringList = ...;
    List<Object> objList = stringList;  // ์ปดํŒŒ์ผ ์—๋Ÿฌ
  • ์ด์œ : ํƒ€์ž… ์•ˆ์ „์„ฑ (Object ํƒ€์ž…์œผ๋กœ ๋ฐ›์œผ๋ฉด Integer๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์–ด๋ฒ„๋ฆผ)

์ž๊ธฐ ์ ๊ฒ€

  • ์ œ๋„ค๋ฆญ์ด ๊ณต๋ณ€์ด์—ˆ๋‹ค๋ฉด ์–ด๋–ค ์‚ฌ๊ณ ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ์„๊นŒ?
  • ๋ฐฐ์—ด์€ ์™œ ๊ณต๋ณ€์œผ๋กœ ์„ค๊ณ„๋๋Š”๊ฐ€? (์—ญ์‚ฌ์  ๋ฐฐ๊ฒฝ)

Unit 5.2 โ€” ๋ฌด์ œํ•œ ์™€์ผ๋“œ์นด๋“œ (?)

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

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

  • List<?> = "์–ด๋–ค ํƒ€์ž…์ด๋“  OK"
  • ๋‹คํ˜•์„ฑ ์ง€์›: List<String>, List<Integer> ๋ชจ๋‘ List<?> ์— ๋Œ€์ž… ๊ฐ€๋Šฅ
  • ๋‹จ, ์•ˆ์—์„œ ๊บผ๋‚ธ ์›์†Œ๋Š” Object๋กœ๋งŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ
public static void processList(List<?> list) {
    for (Object item : list) {
        if (item instanceof String s) { ... }
    }
}

์ž๊ธฐ ์ ๊ฒ€

  • List<?> ์™€ List<Object> ์˜ ์ฐจ์ด๋Š”?
  • List<?> ์— ์–ด๋–ค ์›์†Œ๋„ addํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š”? (ํžŒํŠธ: ํƒ€์ž… ์•ˆ์ „์„ฑ)

Unit 5.3 โ€” ์ƒํ•œ ๊ฒฝ๊ณ„ ์™€์ผ๋“œ์นด๋“œ (? extends T)

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

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

  • Box<? extends Fruit>: T๊ฐ€ Fruit์ด๊ฑฐ๋‚˜ Fruit์˜ ์ž์‹
  • ์ฝ๊ธฐ ์ „์šฉ (Producer) ์—ญํ• ์— ์‚ฌ์šฉ
  • ์•ˆ์—์„œ ๊บผ๋‚ด๋Š” ๊ฑด ์•ˆ์ „ (๋ชจ๋‘ Fruit์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ)
  • ์•ˆ์— ๋„ฃ๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅ (์ •ํ™•ํ•œ ํƒ€์ž…์„ ๋ชจ๋ฅด๋ฏ€๋กœ)
Box<? extends Fruit> box1 = new Box<Apple>();   // OK
Box<? extends Fruit> box2 = new Box<Banana>();  // OK

์ž๊ธฐ ์ ๊ฒ€

  • extends Fruit ์ธ๋ฐ ์™œ add๋Š” ๋ชป ํ•˜๋Š”๊ฐ€?
  • ๋ฐ์ดํ„ฐ๋ฅผ "๊บผ๋‚ด๊ธฐ๋งŒ" ํ•œ๋‹ค๋ฉด ํ•ญ์ƒ extends๋ฅผ ์“ฐ๋Š” ๊ฒŒ ์•ˆ์ „ํ•œ๊ฐ€?

Unit 5.4 โ€” ํ•˜ํ•œ ๊ฒฝ๊ณ„ ์™€์ผ๋“œ์นด๋“œ (? super T)

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

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

  • Box<? super Fruit>: T๊ฐ€ Fruit์ด๊ฑฐ๋‚˜ Fruit์˜ ๋ถ€๋ชจ
  • ์“ฐ๊ธฐ ์ „์šฉ (Consumer) ์—ญํ• ์— ์‚ฌ์šฉ
  • ์•ˆ์— Fruit (๋˜๋Š” ์ž์‹)์„ ๋„ฃ๋Š” ๊ฑด ์•ˆ์ „
  • ๊บผ๋‚ผ ๋•Œ๋Š” Object๋กœ๋งŒ
Box<? super Fruit> box1 = new Box<Fruit>();
Box<? super Fruit> box2 = new Box<Object>();

์ž๊ธฐ ์ ๊ฒ€

  • super Fruit ์ธ๋ฐ ์™œ ๊บผ๋‚ผ ๋•Œ๋Š” Object๋กœ๋งŒ ๋ฐ›๋Š”๊ฐ€?

Unit 5.5 โ€” PECS ์›์น™ (Producer-Extends, Consumer-Super)

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

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

// Producer: ์ปฌ๋ ‰์…˜์—์„œ ๊บผ๋‚ด๊ธฐ (extends)
void printAll(Collection<? extends B> c) {
    for (B e : c) System.out.println(e);
}

// Consumer: ์ปฌ๋ ‰์…˜์— ๋„ฃ๊ธฐ (super)
void addElement(Collection<? super B> c) {
    c.add(new B());
}

๊ทœ์น™ ์š”์•ฝ:

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ธ๋‹ค (Produce) โ†’ extends
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค (Consume) โ†’ super

์ž๊ธฐ ์ ๊ฒ€

  • Collections.copy(dest, src) ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์—์„œ src์™€ dest๋Š” ๊ฐ๊ฐ ์–ด๋А ์ชฝ์ธ๊ฐ€?
  • ์–‘์ชฝ ๋‹ค ํ•„์š”ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? (ํžŒํŠธ: T ์ž์ฒด)

๐Ÿ“š Phase 6 โ€” ๊ฐ์ฒด ๋น„๊ต (Comparable & Comparator)

๋ชฉํ‘œ: ์ž๋ฐ”์—์„œ ๊ฐ์ฒด์˜ ์ •๋ ฌ ๊ธฐ์ค€์„ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋Š”์ง€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ตํžŒ๋‹ค.

Unit 6.1 โ€” ์™œ ๋ณ„๋„์˜ ๋น„๊ต ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•œ๊ฐ€

์„ ์ˆ˜ ์ง€์‹: Phase 5

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

  • ์›์‹œ ํƒ€์ž…: <, > ๋กœ ๋น„๊ต ๊ฐ€๋Šฅ
  • ๊ฐ์ฒด: ์–ด๋–ค ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ• ์ง€ ๋ชจํ˜ธ โ†’ ์ž์ฒด์ ์œผ๋กœ ์ •์˜ ํ•„์š”
  • ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•: Comparable (์ž๊ธฐ ์ž์‹ ) vs Comparator (์™ธ๋ถ€์—์„œ)

์ž๊ธฐ ์ ๊ฒ€

  • obj1 > obj2 ๊ฐ€ ์ž๋ฐ”์—์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ์ธ ์ด์œ ๋Š”?

Unit 6.2 โ€” Comparable: ์ž๊ธฐ ์ž์‹ ๊ณผ ๋น„๊ต

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

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

  • Comparable<T> ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
  • compareTo(T o) ํ•œ ๋ฉ”์„œ๋“œ๋งŒ ์žฌ์ •์˜
  • ๋ฐ˜ํ™˜๊ฐ’:
    • ์Œ์ˆ˜: this < o
    • 0: this == o (์ •๋ ฌ์ƒ)
    • ์–‘์ˆ˜: this > o
  • ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ์ˆœ์„œ(natural ordering) ์ •์˜
  • TreeSet, TreeMap ํ‚ค, Collections.sort() ๊ฐ€ ์ž๋™ ์‚ฌ์šฉ
class Member implements Comparable<Member> {
    int age;
    public int compareTo(Member o) {
        return this.age - o.age;  // ๋‚˜์ด ์˜ค๋ฆ„์ฐจ์ˆœ
    }
}

์ž๊ธฐ ์ ๊ฒ€

  • Integer, String, LocalDate ๊ฐ€ ๋ชจ๋‘ Comparable์ธ ์ด์œ ๋Š”?
  • equals() ์™€ compareTo() ์˜ ์ผ๊ด€์„ฑ์„ ๊นจ๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”๊ฐ€?

Unit 6.3 โ€” Comparator: ์™ธ๋ถ€์—์„œ ๋น„๊ต ๊ธฐ์ค€ ์ฃผ์ž…

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

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

  • Comparator<T> ์ธํ„ฐํŽ˜์ด์Šค
  • compare(T o1, T o2) ํ•œ ๋ฉ”์„œ๋“œ๋งŒ ์žฌ์ •์˜
  • ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ •๋ ฌ ๊ธฐ์ค€ ์ •์˜ โ†’ ๊ฐ™์€ ํด๋ž˜์Šค์— ์—ฌ๋Ÿฌ ์ •๋ ฌ ๊ธฐ์ค€ ๊ฐ€๋Šฅ
  • Collections.sort(list, comparator), list.sort(comparator) ์— ์ „๋‹ฌ
Comparator<Member> byAge = (a, b) -> a.age - b.age;
Comparator<Member> byName = Comparator.comparing(m -> m.name);
list.sort(byAge);
list.sort(byName);

์ž๊ธฐ ์ ๊ฒ€

  • ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด Comparable๊ณผ Comparator ์ค‘ ๋ฌด์—‡์ด ์ ํ•ฉํ•œ๊ฐ€?
  • Comparator.reversed() ๋Š” ๋ฌด์—‡์„ ํ•˜๋Š”๊ฐ€?

Unit 6.4 โ€” Comparable vs Comparator ์„ ํƒ

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

ํ•ต์‹ฌ ๋น„๊ต:

ํ•ญ๋ชฉComparableComparator
์ •์˜ ์œ„์น˜ํด๋ž˜์Šค ๋‚ด๋ถ€ํด๋ž˜์Šค ์™ธ๋ถ€
๋ฉ”์„œ๋“œcompareTo(T o)compare(T o1, T o2)
๋น„๊ต ๋Œ€์ƒthis vs ๋งค๊ฐœ๋ณ€์ˆ˜๋งค๊ฐœ๋ณ€์ˆ˜ 1 vs ๋งค๊ฐœ๋ณ€์ˆ˜ 2
์ •๋ ฌ ๊ธฐ์ค€ ์ˆ˜1๊ฐœ (๊ธฐ๋ณธ)๋ฌด์ œํ•œ

์„ ํƒ ๊ฐ€์ด๋“œ:

  • ํด๋ž˜์Šค์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ์ˆœ์„œ๊ฐ€ ์žˆ๋‹ค: Comparable
  • ์ƒํ™ฉ๋ณ„๋กœ ๋‹ค๋ฅธ ์ •๋ ฌ์ด ํ•„์š”ํ•˜๋‹ค: Comparator
  • ํด๋ž˜์Šค ์ˆ˜์ • ๊ถŒํ•œ์ด ์—†๋‹ค: Comparator๋งŒ ๊ฐ€๋Šฅ

๐Ÿ“š Phase 7 โ€” I/O ์‹œ์Šคํ…œ์˜ ํฐ ๊ทธ๋ฆผ

๋ชฉํ‘œ: I/O์˜ ์ „์ฒด ํ’๊ฒฝ(IO vs NIO, Stream vs Channel, Blocking vs Non-blocking)์„ ์žก๋Š”๋‹ค.

Unit 7.1 โ€” I/O๋ž€ ๋ฌด์—‡์ธ๊ฐ€

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

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

  • I = Input, O = Output
  • JVM ๊ธฐ์ค€:
    • ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ฉด โ†’ Input
    • ์™ธ๋ถ€๋กœ ๋ณด๋‚ด๋ฉด โ†’ Output
  • ์ด "๊ธฐ์ค€์ ์ด JVM"์ด๋ผ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š” (ํ—ท๊ฐˆ๋ฆฌ๋Š” ํฌ์ธํŠธ)

์ž๊ธฐ ์ ๊ฒ€

  • ์ฝ˜์†”์— ์ถœ๋ ฅํ•œ๋‹ค๋Š” ๊ฑด Input์ธ๊ฐ€ Output์ธ๊ฐ€?
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฝ๋Š” ๊ฑด Input์ธ๊ฐ€ Output์ธ๊ฐ€?

Unit 7.2 โ€” IO vs NIO (์—ญ์‚ฌ์  ์ง„ํ™”)

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

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

๊ตฌ๋ถ„IO (Java 1.0~)NIO (Java 1.4+)NIO.2 (Java 7+)
๋‹จ์œ„์ŠคํŠธ๋ฆผ (1๋ฐ”์ดํŠธ์”ฉ)์ฑ„๋„ + ๋ฒ„ํผ (๋ธ”๋ก)์ฑ„๋„ + ๋ฒ„ํผ
๋ฐฉํ–ฅ๋‹จ๋ฐฉํ–ฅ (In/Out ๋ถ„๋ฆฌ)์–‘๋ฐฉํ–ฅ์–‘๋ฐฉํ–ฅ
Blockingํ•ญ์ƒ BlockingNon-blocking ๊ฐ€๋ŠฅNon-blocking ๊ฐ€๋Šฅ
ํŒŒ์ผ APIFile ํด๋ž˜์ŠคFileChannelFiles (static), Path

File vs Files ํ•ต์‹ฌ ์ฐจ์ด:

  • File: ๊ฐ์ฒด ์ƒ์„ฑ ํ•„์š”, ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๋“ฑ ์ผ๋ถ€ ๊ธฐ๋Šฅ ๋ถ€์žฌ
  • Files: ๋ชจ๋“  ๋ฉ”์„œ๋“œ static, ํ’๋ถ€ํ•œ API

์ž๊ธฐ ์ ๊ฒ€

  • ์–ด๋–ค ์ƒํ™ฉ์— IO๋ฅผ, ์–ด๋–ค ์ƒํ™ฉ์— NIO๋ฅผ ์จ์•ผ ํ•˜๋Š”๊ฐ€?
  • File ์ด "๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ์‚ฌ์šฉ"์ธ ๋ฐ ๋น„ํ•ด Files ๊ฐ€ "static"์ธ ๊ฒŒ ์–ด๋–ค ์žฅ์ ์„ ์ฃผ๋Š”๊ฐ€?

Unit 7.3 โ€” Stream vs Channel

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

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

ํ•ญ๋ชฉStream (IO)Channel (NIO)
๋ฐ์ดํ„ฐ ๋‹จ์œ„byte / byte[]Buffer (๋ธ”๋ก)
๋ฐฉํ–ฅ๋‹จ๋ฐฉํ–ฅ (In ๋˜๋Š” Out)์–‘๋ฐฉํ–ฅ
๋ฒ„ํผ๊ธฐ๋ณธ non-buffer (๋ณด์กฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ถ”๊ฐ€)ํ•ญ์ƒ Buffer ํ†ตํ•ด์„œ
๋™์ž‘BlockingBlocking ๋˜๋Š” Non-blocking

ํ•ต์‹ฌ ํฌ์ธํŠธ

  • Channel์€ ํ•ญ์ƒ Buffer ํ†ตํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ
  • Channel์—์„œ ์ฝ๊ธฐ โ†’ Buffer์— ๋‹ด์Œ โ†’ ์ฒ˜๋ฆฌ
  • Channel์— ์“ฐ๊ธฐ โ†’ Buffer์— ๋‹ด์Œ โ†’ Channel์— flush

์ž๊ธฐ ์ ๊ฒ€

  • "์–‘๋ฐฉํ–ฅ"์ด ์šด์˜์ƒ ์–ด๋–ค ์ด์ ์„ ์ฃผ๋Š”๊ฐ€?
  • Buffer๊ฐ€ NIO์˜ ํ•„์ˆ˜ ์š”์†Œ์ธ ์ด์œ ๋Š”?

Unit 7.4 โ€” Blocking vs Non-blocking

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

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

Blocking IO:

  • read() ํ˜ธ์ถœ โ†’ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ์Šค๋ ˆ๋“œ ์ •์ง€
  • ๋น ์ ธ๋‚˜์˜ค๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•: ์ŠคํŠธ๋ฆผ close()
  • ์ธํ„ฐ๋ŸฝํŠธ๋„ ์•ˆ ํ†ตํ•จ

Non-blocking NIO:

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ์ฆ‰์‹œ 0 ๋ฐ˜ํ™˜ (์Šค๋ ˆ๋“œ ์ •์ง€ X)
  • ํ•ต์‹ฌ ๊ฐ์ฒด: Selector (๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ) โ€” ์—ฌ๋Ÿฌ ์ฑ„๋„ ์ค‘ ์ค€๋น„๋œ ๊ฒƒ๋งŒ ๊ณจ๋ผ ์ฒ˜๋ฆฌ
  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜๋งŽ์€ ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

์ž๊ธฐ ์ ๊ฒ€

  • ๋™์‹œ ์ ‘์† 1๋งŒ ๋ช…์„ Blocking IO๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์Šค๋ ˆ๋“œ ๋ช‡ ๊ฐœ ํ•„์š”?
  • Non-blocking์ด ํ•ญ์ƒ ์ข‹์€๊ฐ€? (ํžŒํŠธ: CPU ๋ฐ”์šด๋“œ ์ž‘์—…์—์„œ๋Š” ์˜คํžˆ๋ ค ์†ํ•ด)

Unit 7.5 โ€” ์˜ค๋ฒ„ํ—ค๋“œ์™€ File ๊ฐ์ฒด

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

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

์˜ค๋ฒ„ํ—ค๋“œ:

  • ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๊ฐ„์ ‘์  ์‹œ๊ฐ„/๋ฉ”๋ชจ๋ฆฌ/์ž์›
  • ์˜ˆ: 10์ดˆ ์งœ๋ฆฌ ์ž‘์—…์ด 20์ดˆ ๊ฑธ๋ฆฌ๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๋Š” 10์ดˆ

File ๊ฐ์ฒด (์ „ํ†ต IO):

File file = new File(path, fileName);
file.createNewFile();        // ํŒŒ์ผ ์ƒ์„ฑ
file.getAbsolutePath();      // ์ ˆ๋Œ€๊ฒฝ๋กœ
file.getCanonicalPath();     // ์ •๊ทœํ™”๋œ ๊ฒฝ๋กœ
file.getName();              // ํŒŒ์ผ๋ช…
file.getParent();            // ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ

์ž๊ธฐ ์ ๊ฒ€

  • "๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ž๋™ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค"๋Š” ์‚ฌ์‹ค์ด ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฒ„๊ทธ๋Š”?

๐Ÿ“š Phase 8 โ€” Stream ์‹ค์ „ (InputStream / OutputStream / Reader / Writer)

๋ชฉํ‘œ: ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ๊ณผ ๋ฌธ์ž ์ŠคํŠธ๋ฆผ์˜ ์ฐจ์ด๋ฅผ ์†์— ์ตํžˆ๊ณ  ํ•œ๊ธ€ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์ž์œ ๋กญ๊ฒŒ ํ•œ๋‹ค.

Unit 8.1 โ€” System.in (๊ทธ๋ฆฌ๊ณ  ํ•œ๊ธ€์ด ์•ˆ ๋˜๋Š” ์ด์œ )

์„ ์ˆ˜ ์ง€์‹: Phase 7

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

  • System.in = ํ‘œ์ค€ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ (๋ณดํ†ต ํ‚ค๋ณด๋“œ)
  • InputStream ํƒ€์ž…
  • read() ๋Š” 1๋ฐ”์ดํŠธ์”ฉ ์ฝ์Œ

ํ•œ๊ธ€์ด ์•ˆ ๋˜๋Š” ์ด์œ :

  • ์˜์–ด 1๊ธ€์ž = 1byte โ†’ OK
  • ํ•œ๊ธ€ 1๊ธ€์ž = 2~3byte (UTF-8) โ†’ read() ํ•œ ๋ฒˆ์œผ๋กœ๋Š” ๊นจ์ง

์ž๊ธฐ ์ ๊ฒ€

  • ํ•œ๊ธ€์„ ์ œ๋Œ€๋กœ ์ฝ์œผ๋ ค๋ฉด ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ์จ์•ผ ํ•˜๋Š”๊ฐ€? (ํžŒํŠธ: Reader)

Unit 8.2 โ€” FileInputStream

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

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

  • InputStream์„ ์ƒ์†ํ•œ ํŒŒ์ผ ์ „์šฉ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ
  • read(): 1๋ฐ”์ดํŠธ ์ฝ๊ธฐ (๋ฐ˜ํ™˜์€ int)
  • ํŒŒ์ผ ๋(EOF) ์‹œ -1 ๋ฐ˜ํ™˜
  • ์‚ฌ์šฉ ํ›„ ๋ฐ˜๋“œ์‹œ close() (๋˜๋Š” try-with-resources)
try (FileInputStream fis = new FileInputStream("input.txt")) {
    int b;
    while ((b = fis.read()) != -1) {
        System.out.print((char) b);
    }
}

์ž๊ธฐ ์ ๊ฒ€

  • read() ์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด byte๊ฐ€ ์•„๋‹ˆ๋ผ int์ธ ์ด์œ ๋Š”? (ํžŒํŠธ: -1์„ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„?)

Unit 8.3 โ€” byte[] ๋ฐฐ์—ด๋กœ ํšจ์œจ์  ์ฝ๊ธฐ

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

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

  • 1๋ฐ”์ดํŠธ์”ฉ ์ฝ์œผ๋ฉด ๋„ˆ๋ฌด ๋А๋ฆผ โ†’ byte[] ๋ฒ„ํผ๋กœ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฐ”์ดํŠธ
  • read(byte[] buf) ๋Š” ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜ ๋ฐ˜ํ™˜
  • ํ•จ์ •: ๋งˆ์ง€๋ง‰ ์ฝ๊ธฐ์—์„œ ๋ฒ„ํผ๊ฐ€ ๋‹ค ์•ˆ ์ฑ„์›Œ์ง€๋ฉด ์ด์ „ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์Œ
byte[] buf = new byte[10];
int n;
while ((n = fis.read(buf)) != -1) {
    for (int k = 0; k < n; k++) {  // โ† n๊นŒ์ง€๋งŒ! buf.length๊ฐ€ ์•„๋‹˜
        System.out.print((char) buf[k]);
    }
}

์ž๊ธฐ ์ ๊ฒ€

  • for (byte b : buf) ๋กœ ์ˆœํšŒํ•˜๋ฉด ๋งˆ์ง€๋ง‰์— ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”๊ฐ€?

Unit 8.4 โ€” FileOutputStream

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

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

  • OutputStream์„ ์ƒ์†
  • write(int b): 1๋ฐ”์ดํŠธ ์“ฐ๊ธฐ
  • ์ƒ์„ฑ์ž new FileOutputStream(path, true) โ†’ ์ด์–ด์“ฐ๊ธฐ ๋ชจ๋“œ
  • ๊ธฐ๋ณธ ๋ชจ๋“œ๋Š” ๋ฎ์–ด์“ฐ๊ธฐ
try (FileOutputStream fos = new FileOutputStream("output.txt", true)) {
    fos.write(65);  // 'A'
    fos.write(66);  // 'B'
}

๋ฐ”์ดํŠธ๊ฐ€ ์˜์–ด๋กœ ๋ณด์ด๋Š” ์ด์œ :

  • ํŒŒ์ผ์— ์ €์žฅ๋œ ๊ฑด ์ˆซ์ž(๋ฐ”์ดํŠธ)
  • ํ…์ŠคํŠธ ์—๋””ํ„ฐ๊ฐ€ ์ธ์ฝ”๋”ฉ์„ ํ•ด์„ํ•ด์„œ ๋ฌธ์ž๋กœ ๋ณด์—ฌ์คŒ
  • 65 โ†’ 'A' (ASCII/UTF-8 ๋งคํ•‘)

์ž๊ธฐ ์ ๊ฒ€

  • ํ•œ๊ธ€์„ write(byte) ๋กœ 1๋ฐ”์ดํŠธ์”ฉ ์“ฐ๋ฉด ์™œ ๊นจ์ง€๋Š”๊ฐ€?

Unit 8.5 โ€” ํ•œ๊ธ€ ์ฒ˜๋ฆฌ (FileReader, InputStreamReader)

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

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

  • Reader/Writer: ๋ฌธ์ž(char) ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ŠคํŠธ๋ฆผ
  • ์ธ์ฝ”๋”ฉ์„ ์•Œ์•„์„œ ํ•ด์„ โ†’ ํ•œ๊ธ€, ์ผ๋ณธ์–ด ๋“ฑ ๋‹ค๊ตญ์–ด OK

๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•:

// ๋ฐฉ๋ฒ• 1: FileReader (์ง์ ‘)
try (FileReader fr = new FileReader("reader.txt")) {
    int c;
    while ((c = fr.read()) != -1) System.out.print((char) c);
}

// ๋ฐฉ๋ฒ• 2: InputStreamReader (๋ณด์กฐ ์ŠคํŠธ๋ฆผ)
try (FileInputStream fis = new FileInputStream("reader.txt");
     InputStreamReader isr = new InputStreamReader(fis)) {
    int c;
    while ((c = isr.read()) != -1) System.out.print((char) c);
}

์ž๊ธฐ ์ ๊ฒ€

  • FileReader ์™€ InputStreamReader ์˜ ์ฐจ์ด๋Š”?
  • ์–ด๋–ค ๊ฒฝ์šฐ์— InputStreamReader ๋ฐฉ์‹์ด ํ•„์š”ํ•œ๊ฐ€? (ํžŒํŠธ: ์ธ์ฝ”๋”ฉ ๋ช…์‹œ)

Unit 8.6 โ€” FileWriter (ํ•œ๊ธ€ ์“ฐ๊ธฐ)

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

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

  • Writer ์˜ ํŒŒ์ผ์šฉ ๊ตฌํ˜„์ฒด
  • write(int), write(char[]), write(String), write(char[], offset, length) ๋‹ค์–‘
try (FileWriter fw = new FileWriter("writer.txt")) {
    fw.write('A');
    fw.write(new char[]{'B', 'C', 'D'});
    fw.write("์•ˆ๋…•ํ•˜์„ธ์š”");
}

์ž๊ธฐ ์ ๊ฒ€

  • FileWriter ์™€ FileOutputStream ์„ ํ•œ๊ธ€ ๋ฐ์ดํ„ฐ์— ๊ฐ๊ฐ ์“ฐ๋ฉด ๊ฒฐ๊ณผ๋Š”?

๐Ÿ“š Phase 9 โ€” I/O ๊ฐ•ํ™” (Buffered / Data / Serialization)

๋ชฉํ‘œ: ๊ธฐ๋ณธ ์ŠคํŠธ๋ฆผ์— ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์„ ์ž…ํ˜€ ์„ฑ๋ŠฅยทํŽธ์˜์„ฑยท๊ตฌ์กฐํ™”๋ฅผ ๋ชจ๋‘ ์žก๋Š”๋‹ค.

Unit 9.1 โ€” try-with-resources (์ž๋™ close)

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

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

  • Java 7+: try (์ž์›์„ ์–ธ) ๊ตฌ๋ฌธ
  • ๋ธ”๋ก์ด ๋๋‚  ๋•Œ ์ž๋™์œผ๋กœ close() ํ˜ธ์ถœ
  • ์—ฌ๋Ÿฌ ์ž์›: ์„ ์–ธ ์ˆœ์„œ๋Œ€๋กœ ์—ด๊ณ , ์—ญ์ˆœ์œผ๋กœ ๋‹ซ์Œ
  • ์กฐ๊ฑด: ์ž์›์ด AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
try (FileInputStream fis = new FileInputStream("a.txt");
     FileOutputStream fos = new FileOutputStream("b.txt")) {
    // ...
} // fos.close() โ†’ fis.close() ์ˆœ์œผ๋กœ ํ˜ธ์ถœ

์ž๊ธฐ ์ ๊ฒ€

  • finally ๋ธ”๋ก์—์„œ close ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค try-with-resources๊ฐ€ ๋” ์•ˆ์ „ํ•œ ์ด์œ ๋Š”?

Unit 9.2 โ€” BufferedInputStream / BufferedOutputStream

์„ ์ˆ˜ ์ง€์‹: Phase 8

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

  • ๊ธฐ๋ณธ ์ŠคํŠธ๋ฆผ์€ 1๋ฐ”์ดํŠธ๋งˆ๋‹ค OS ํ˜ธ์ถœ โ†’ ๋А๋ฆผ
  • Buffered ์ŠคํŠธ๋ฆผ์€ ๋‚ด๋ถ€ ๋ฒ„ํผ(๊ธฐ๋ณธ 8KB) ์— ๋ชจ์•„์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ
  • I/O ํ˜ธ์ถœ ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด ์„ฑ๋Šฅ ๋Œ€ํญ ํ–ฅ์ƒ
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dst))) {
    byte[] buf = new byte[1024];
    int n;
    while ((n = bis.read(buf)) != -1) bos.write(buf, 0, n);
}

์ž๊ธฐ ์ ๊ฒ€

  • Buffered ์—†์ด 1MB ํŒŒ์ผ์„ 1๋ฐ”์ดํŠธ์”ฉ ๋ณต์‚ฌํ•˜๋ฉด OS ํ˜ธ์ถœ์ด ๋ช‡ ๋ฒˆ? (๋Œ€๋žต)
  • BufferedReader๋„ ๊ฐ™์€ ์›๋ฆฌ์ธ๊ฐ€?

Unit 9.3 โ€” DataInputStream / DataOutputStream

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

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

  • ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(int, double, boolean, String)์„ ํƒ€์ž…๋ณ„๋กœ ์ €์žฅ/์ฝ๊ธฐ
  • ํ…์ŠคํŠธ ๋ณ€ํ™˜ยทํŒŒ์‹ฑ ๋ถˆํ•„์š” โ†’ ์ฝ”๋“œ ๊ฐ„๊ฒฐ, ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ

DataStream ์—†์ด (CSV ๋ฐฉ์‹):

writer.write(name + "," + age + "," + score);  // ๋งค๋ฒˆ ํŒŒ์‹ฑ ํ•„์š”

DataStream ์‚ฌ์šฉ:

dos.writeUTF(name);
dos.writeInt(age);
dos.writeDouble(score);
// ์ฝ์„ ๋•Œ
String name = dis.readUTF();
int age = dis.readInt();
double score = dis.readDouble();

์ž๊ธฐ ์ ๊ฒ€

  • ํ…์ŠคํŠธ ์ €์žฅ vs ์ด์ง„ ์ €์žฅ์˜ ์žฅ๋‹จ์ ์€?

Unit 9.4 โ€” Serialization (์ง๋ ฌํ™”)

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

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

  • ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ โ†’ ํŒŒ์ผ ์ €์žฅ, ๋„คํŠธ์›Œํฌ ์ „์†ก
  • ํด๋ž˜์Šค์— Serializable (๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค) ๊ตฌํ˜„
  • ObjectOutputStream.writeObject(obj) / ObjectInputStream.readObject()
  • transient ํ•„๋“œ๋Š” ์ง๋ ฌํ™” ์ œ์™ธ (1์ฃผ์ฐจ์— ํ•™์Šต)

์˜ˆ์‹œ:

class Person implements Serializable {
    String name;
    transient String job;  // ์ œ์™ธ๋จ
}

oos.writeObject(personLee);          // ์ €์žฅ
Person p = (Person) ois.readObject();  // ๋ณต์›

์ž๊ธฐ ์ ๊ฒ€

  • transient ๊ฐ€ ์ ์šฉ๋œ ํ•„๋“œ๋Š” ์—ญ์ง๋ ฌํ™” ํ›„ ์–ด๋–ค ๊ฐ’์ด ๋˜๋Š”๊ฐ€?
  • ์ •์  ํ•„๋“œ๋Š” ์ง๋ ฌํ™”๋˜๋Š”๊ฐ€?

Unit 9.5 โ€” serialVersionUID

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

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

  • ์ง๋ ฌํ™”๋œ ํด๋ž˜์Šค์˜ ๋ฒ„์ „ ์‹๋ณ„์ž
  • ๋ช…์‹œ ์•ˆ ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™ ์ƒ์„ฑ (ํด๋ž˜์Šค ๊ตฌ์กฐ ๊ธฐ๋ฐ˜)
  • ํด๋ž˜์Šค ๋ณ€๊ฒฝ ์‹œ ์ž๋™ ์ƒ์„ฑ UID๊ฐ€ ๋ฐ”๋€Œ๋ฉด โ†’ ์—ญ์ง๋ ฌํ™” ์‹œ InvalidClassException
public class MyClass implements Serializable {
    private static final long serialVersionUID = 1L;
    // ...
}

์ž๊ธฐ ์ ๊ฒ€

  • ์šด์˜ ์ค‘์ธ ์‹œ์Šคํ…œ์—์„œ serialVersionUID ๋ช…์‹œ ๋ˆ„๋ฝ์ด ์–ด๋–ค ์‚ฌ๊ณ ๋กœ ์ด์–ด์ง€๋Š”๊ฐ€?
  • IDE๊ฐ€ serialVersionUID ๋ˆ„๋ฝ์— ๊ฒฝ๊ณ ๋ฅผ ๋„์šฐ๋Š” ์ด์œ ๋Š”?

๐Ÿ“š Phase 10 โ€” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ (๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ)

๋ชฉํ‘œ: ํ•จ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ๋‹ค๋ฃจ๋Š” ์ƒˆ ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์ปฌ๋ ‰์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ํ•œ๋‹ค.

Unit 10.1 โ€” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค(Functional Interface)

์„ ์ˆ˜ ์ง€์‹: Phase 4

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

  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์ •ํ™•ํžˆ 1๊ฐœ ์ธ ์ธํ„ฐํŽ˜์ด์Šค
  • @FunctionalInterface ์–ด๋…ธํ…Œ์ด์…˜ (๊ฐ•์ œ ๊ฒ€์ฆ)
  • ๋žŒ๋‹ค์‹์œผ๋กœ ์ธ์Šคํ„ด์Šคํ™” ๊ฐ€๋Šฅ

์ž๋ฐ” ํ‘œ์ค€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค:

์ธํ„ฐํŽ˜์ด์Šค์‹œ๊ทธ๋‹ˆ์ฒ˜์šฉ๋„
Function<T, R>R apply(T)๋ณ€ํ™˜
Predicate<T>boolean test(T)์กฐ๊ฑด
Consumer<T>void accept(T)์†Œ๋น„
Supplier<T>T get()๊ณต๊ธ‰

์ž๊ธฐ ์ ๊ฒ€

  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ 2๊ฐœ์ธ ์ธํ„ฐํŽ˜์ด์Šค์— ๋žŒ๋‹ค๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • Runnable, Comparator, Comparable ๋„ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์ธ๊ฐ€?

Unit 10.2 โ€” ๋žŒ๋‹ค ํ‘œํ˜„์‹

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

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

  • ์ต๋ช… ํ•จ์ˆ˜ ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„
  • ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€ํ™˜๋จ
// ์ „ํ†ต: ์ต๋ช… ํด๋ž˜์Šค
Comparator<Integer> c1 = new Comparator<Integer>() {
    public int compare(Integer a, Integer b) { return a - b; }
};

// ๋žŒ๋‹ค
Comparator<Integer> c2 = (a, b) -> a - b;
  • ๋ณ€์ˆ˜ ์บก์ฒ˜: ๋žŒ๋‹ค ์•ˆ์—์„œ ์™ธ๋ถ€ ์ง€์—ญ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (๋‹จ, ์‚ฌ์‹ค์ƒ final)

์ž๊ธฐ ์ ๊ฒ€

  • ์ต๋ช… ํด๋ž˜์Šค์— ๋น„ํ•ด ๋žŒ๋‹ค๊ฐ€ ๊ฐ€์ง€๋Š” ๋‹จ์ ์€? (ํžŒํŠธ: this ์˜๋ฏธ, ๋””๋ฒ„๊น…)

Unit 10.3 โ€” ์ŠคํŠธ๋ฆผ (I/O ์ŠคํŠธ๋ฆผ๊ณผ ๋‹ค๋ฆ„)

์„ ์ˆ˜ ์ง€์‹: Unit 10.2, Phase 2

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

  • ์ปฌ๋ ‰์…˜ยท๋ฐฐ์—ด์— ๋™์ผ ์—ฐ์‚ฐ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌ
  • I/O ์ŠคํŠธ๋ฆผ๊ณผ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฐœ๋… (์ด๋ฆ„๋งŒ ๊ฐ™์Œ)
  • ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•œ ์ŠคํŠธ๋ฆผ์€ ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€
  • ์ค‘๊ฐ„ ์—ฐ์‚ฐ + ์ตœ์ข… ์—ฐ์‚ฐ ์œผ๋กœ ๊ตฌ์„ฑ

์ค‘๊ฐ„ ์—ฐ์‚ฐ (Stream ๋ฐ˜ํ™˜):

  • filter, map, sorted, distinct, limit, skip

์ตœ์ข… ์—ฐ์‚ฐ (๊ฐ’ ๋˜๋Š” void ๋ฐ˜ํ™˜):

  • forEach, collect, count, reduce, anyMatch
sList.stream()
    .filter(s -> s.length() > 3)
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

์ž๊ธฐ ์ ๊ฒ€

  • ์ŠคํŠธ๋ฆผ์€ ์™œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฐ€?
  • ์ค‘๊ฐ„ ์—ฐ์‚ฐ๋งŒ ํ˜ธ์ถœํ•˜๊ณ  ์ตœ์ข… ์—ฐ์‚ฐ์„ ์•ˆ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€? (ํžŒํŠธ: ์ง€์—ฐ ํ‰๊ฐ€)

Unit 10.4 โ€” ์ŠคํŠธ๋ฆผ ์‹ค์ „ ํŒจํ„ด

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

ํ•ต์‹ฌ ํŒจํ„ด:

// 1. ํ•„ํ„ฐ๋ง + ๋ณ€ํ™˜ + ์ˆ˜์ง‘
List<Integer> lengths = sList.stream()
    .filter(s -> !s.isEmpty())
    .map(String::length)
    .collect(Collectors.toList());

// 2. ํ†ต๊ณ„
int total = nums.stream().mapToInt(Integer::intValue).sum();
double avg = nums.stream().mapToInt(Integer::intValue).average().orElse(0);

// 3. ๊ทธ๋ฃนํ•‘
Map<Integer, List<String>> byLength = sList.stream()
    .collect(Collectors.groupingBy(String::length));

์ž๊ธฐ ์ ๊ฒ€

  • stream() ๊ณผ parallelStream() ์˜ ์ฐจ์ด์™€ ์ฃผ์˜์ ์€?
  • Collectors.toList() ์™€ .toList() (Java 16+)์˜ ์ฐจ์ด๋Š”?

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

Pass by Value

  1. C ํฌ์ธํ„ฐ์˜ *p์™€ &a ์˜ ์˜๋ฏธ๋ฅผ ์„ค๋ช…ํ•˜๋ผ
  2. ์ž๋ฐ”๊ฐ€ "Pass by reference ์—†์Œ"์ด๋ผ๋Š” ๋ง์˜ ์ •ํ™•ํ•œ ์˜๋ฏธ๋Š”?
  3. arg2 = arg1 ๊ฐ€ ํ˜ธ์ถœ์ž์— ์˜ํ–ฅ์„ ์•ˆ ์ฃผ๋Š” ์ด์œ ๋ฅผ ์Šคํƒ ํ”„๋ ˆ์ž„์œผ๋กœ ์„ค๋ช…ํ•˜๋ผ

์ปฌ๋ ‰์…˜ (์ „์ฒด ์ง€๋„)

  1. List/Set/Queue/Map์˜ ์ฐจ์ด๋ฅผ ํ•œ ๋ฌธ์žฅ์”ฉ ์ •๋ฆฌํ•˜๋ผ
  2. ArrayList vs LinkedList vs Vector ์„ ํƒ ๊ธฐ์ค€์€?
  3. HashSet/TreeSet/LinkedHashSet ์ฐจ์ด๋Š”?
  4. HashMap/LinkedHashMap/TreeMap/HashTable/ConcurrentHashMap ๋น„๊ต
  5. Queue ๋ฉ”์„œ๋“œ ํŽ˜์–ด (offer/add, peek/element, poll/remove) ์ฐจ์ด๋Š”?

ํ•ด์‹œ

  1. ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์ข‹์€ ์กฐ๊ฑด 3๊ฐ€์ง€๋Š”?
  2. ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ถˆ๊ฐ€ํ”ผํ•œ ์ด์œ ๋Š”?
  3. ์ฒด์ด๋‹๊ณผ ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ์˜ ์ฐจ์ด๋Š”?
  4. Java 8 HashMap์ด ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜๋˜๋Š” ์กฐ๊ฑด์€?

์ถ”์ƒํด๋ž˜์Šค vs ์ธํ„ฐํŽ˜์ด์Šค

  1. ์ธํ„ฐํŽ˜์ด์Šค ํ•„๋“œ๊ฐ€ ์ž๋™์œผ๋กœ public static final ์ธ ์ด์œ ๋Š”?
  2. Java 8์˜ default ๋ฉ”์„œ๋“œ๊ฐ€ ๋„์ž…๋œ ์ด์œ ๋Š”?
  3. ์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ์ค‘ ๋ฌด์—‡์„ ์„ ํƒํ• ์ง€์˜ ๊ธฐ์ค€์€?

์ œ๋„ค๋ฆญ๊ณผ ์™€์ผ๋“œ์นด๋“œ

  1. List<String> ์ด List<Object> ๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š”?
  2. PECS ์›์น™์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•˜๋ผ
  3. Box<? extends Fruit> ์— add๋ฅผ ๋ชป ํ•˜๋Š” ์ด์œ ๋Š”?

Comparable & Comparator

  1. Comparable๊ณผ Comparator์˜ ์ฐจ์ด๋Š”?
  2. compareTo ์˜ ๋ฐ˜ํ™˜๊ฐ’ ๊ทœ์น™์€?
  3. ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฌด์—‡์„ ์“ฐ๋Š”๊ฐ€?

I/O

  1. JVM ๊ธฐ์ค€ Input๊ณผ Output์˜ ์ •์˜๋Š”?
  2. Stream๊ณผ Channel์˜ ํ•ต์‹ฌ ์ฐจ์ด 3๊ฐ€์ง€๋Š”?
  3. Blocking๊ณผ Non-blocking์˜ ์ฐจ์ด๋ฅผ ๋™์‹œ ์ ‘์† 1๋งŒ ๋ช… ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์„ค๋ช…ํ•˜๋ผ
  4. ํ•œ๊ธ€์ด read() 1๋ฐ”์ดํŠธ๋กœ๋Š” ์•ˆ ์ฝํžˆ๋Š” ์ด์œ ๋Š”?

๋ณด์กฐ ์ŠคํŠธ๋ฆผ

  1. BufferedStream์ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€?
  2. DataStream์ด ํ…์ŠคํŠธ ์ €์žฅ๋ณด๋‹ค ์œ ๋ฆฌํ•œ ์ด์œ ๋Š”?
  3. serialVersionUID ๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š”?

ํ•จ์ˆ˜ํ˜•

  1. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ •์˜๋Š”?
  2. ์ŠคํŠธ๋ฆผ์ด ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š”?
  3. ์ค‘๊ฐ„ ์—ฐ์‚ฐ๊ณผ ์ตœ์ข… ์—ฐ์‚ฐ์˜ ์ฐจ์ด๋Š”?

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

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

๋ฐ˜๋“œ์‹œ ๊นŠ์ด ํŒŒ๊ธฐ:

  • Unit 1.3 โ€” ์ž๋ฐ”์˜ Call by Value ํ•œ ๊ฐ€์ง€ (๋ฉด์ ‘ ๋‹จ๊ณจ)
  • Unit 3.3 ~ 3.4 โ€” ํ•ด์‹œ ์ถฉ๋Œ ํ•ด๊ฒฐ (HashMap ๋ฉด์ ‘ ๋‹จ๊ณจ)
  • Unit 5.5 โ€” PECS ์›์น™ (์ œ๋„ค๋ฆญ ๋งˆ์Šคํ„ฐ์˜ ํ•ต์‹ฌ)
  • Unit 7.4 โ€” Blocking vs Non-blocking (์„œ๋ฒ„ ์‚ฌ์ด๋“œ ํ•„์ˆ˜)
  • Unit 10.3 โ€” ์ŠคํŠธ๋ฆผ (์ž๋ฐ” 8 ์ดํ›„ ํ•„์ˆ˜ ๋„๊ตฌ)

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

[ ] Phase 1 โ€” Pass by Value ์ •๋ณต (Unit 1.1~1.3)
[ ] Phase 2 โ€” ์ปฌ๋ ‰์…˜ ์ „์ฒด ์ง€๋„ (Unit 2.1~2.6)
[ ] Phase 3 โ€” ํ•ด์‹œ์˜ ์›๋ฆฌ (Unit 3.1~3.4)
[ ] Phase 4 โ€” ์ถ”์ƒํด๋ž˜์Šค vs ์ธํ„ฐํŽ˜์ด์Šค (Unit 4.1~4.4)
[ ] Phase 5 โ€” ์ œ๋„ค๋ฆญ๊ณผ ์™€์ผ๋“œ์นด๋“œ (Unit 5.1~5.5)
[ ] Phase 6 โ€” ๊ฐ์ฒด ๋น„๊ต (Unit 6.1~6.4)
[ ] Phase 7 โ€” I/O ์‹œ์Šคํ…œ ํฐ ๊ทธ๋ฆผ (Unit 7.1~7.5)
[ ] Phase 8 โ€” Stream ์‹ค์ „ (Unit 8.1~8.6)
[ ] Phase 9 โ€” I/O ๊ฐ•ํ™” (Unit 9.1~9.5)
[ ] Phase 10 โ€” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Unit 10.1~10.4)
[ ] ์ข…ํ•ฉ ์ž๊ธฐ ์ ๊ฒ€ 31๋ฌธํ•ญ ํ†ต๊ณผ

1ยท2ยท3์ฃผ์ฐจ ํ๋ฆ„ ์ •๋ฆฌ

  • 1์ฃผ์ฐจ: OOPยทJVMยทGCยท์ปฌ๋ ‰์…˜ยทI/O ๊ฐœ๋ก 
  • 2์ฃผ์ฐจ: JVM ๋‚ด๋ถ€ยท๋ฐ”์ดํŠธ์ฝ”๋“œยทG1 GCยท์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ยทReflectionยทIterator
  • 3์ฃผ์ฐจ (์ง€๊ธˆ): ์ปฌ๋ ‰์…˜ ์ „์ฒด ์ง€๋„ยทํ•ด์‹œยท์ œ๋„ค๋ฆญยท์™€์ผ๋“œ์นด๋“œยท๋น„๊ตยทI/O ๊นŠ์ดยทํ•จ์ˆ˜ํ˜•
profile
Software Developer

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