1. try-with-resource
  2. ๊ฐ•ํ•œ ๊ฒฐํ•ฉ๊ณผ ๋А์Šจํ•œ ๊ฒฐํ•ฉ
  3. ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”
  4. ์ž๋ฐ”์˜ ๋™์‹œ์„ฑ ์ด์Šˆ(๊ณต์œ ์ž์› ์ ‘๊ทผ)
  5. Mutable ๊ฐ์ฒด์™€ Immutable ๊ฐ์ฒด์˜ ์ฐจ์ด์ 
  6. ์ž๋ฐ”์—์„œ null์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•
  7. JDK์™€ JRE์˜ ์ฐจ์ด์ 

1. try-with-resource

  • java์—์„œ ์ž๋™์œผ๋กœ ์ž์›์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ตฌ์กฐ
  • ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ close()์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ž์› ํ•ด์ œ
  • ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์•ˆ์ „์„ฑ์„ ๋†’์ž„

Question

try-with-resources๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

try-with-resources๋Š” ์ž์›์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ close() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ try ๋ธ”๋Ÿญ์ด ํ•ด์ œ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ž์›์„ ํ•ด์ œํ•ด ์ฃผ์–ด ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์•ˆ์ „์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ†’ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๊ด€๋ จ๋œ ํด๋ž˜์Šค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ํด๋ž˜์Šค, ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ํด๋ž˜์Šค ๋“ฑ๋“ฑ

Question

๊ธฐ์กด try-finally ๋ฐฉ์‹๊ณผ try-with-resources ๋ฐฉ์‹์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

try-finally ๋ฐฉ์‹์—์„œ๋Š” ์ž์›์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ซ๊ธฐ ์œ„ํ•ด finally ๋ธ”๋ก์—์„œ close() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๊ฐ€ ์ค‘๋‹จ๋  ๊ฒฝ์šฐ ์ž์›์„ ์ œ๋Œ€๋กœ ๋‹ซ์ง€ ๋ชปํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด, try-with-resources๋Š” ์ž์›์ด ์ž๋™์œผ๋กœ ๋‹ซํžˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฐ„์†Œํ™”๋˜๊ณ  ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ค‘์—๋„ ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2. ๊ฐ•ํ•œ ๊ฒฐํ•ฉ๊ณผ ๋А์Šจํ•œ ๊ฒฐํ•ฉ

๊ฐ•ํ•œ ๊ฒฐํ•ฉ

  • ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋†’์€ ์ƒํƒœ
  • ํด๋ž˜์Šค ๊ฐ„์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ต๊ณ , ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ
  • ์˜์กด์„ฑ์ด ๋†’๋‹ค (๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜์กดํ•จ)
  • ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋‚ฎ๋‹ค (๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ๋…๋ฆฝ์  ์‚ฌ์šฉ์ด ์–ด๋ ค์›€)
  • ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค (๋‹ค๋ฅธํด๋ž˜์Šค ์—†์ด ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ์–ด๋ ค์›€)

๋А์Šจํ•œ ๊ฒฐํ•ฉ

  • ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋‚ฎ์€ ์ƒํƒœ
  • ํด๋ž˜์Šค๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์€ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒํด๋ž˜์Šค๋“ฑ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง
  • ์˜์กด์„ฑ์ด ๋‚ฎ๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๊ณ , ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๊ณ , ํ™•์žฅ์„ฑ์ด ์šฐ์ˆ˜ํ•จ

๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒํด๋ž˜์Šค์— ์˜์กดํ•˜๋„๋ก ์„ค๊ณ„
  • ๊ฐ์ฒด ๊ฐ„ ์˜์กด์„ฑ์„ ์ƒ์„ฑ์ž, ๋ฉ”์„œ๋“œ, ํ•„๋“œ์ฃผ์ž…๋ฐฉ์‹์œผ๋กœ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…(DI)

Question

๊ฐ•ํ•œ ๊ฒฐํ•ฉ๊ณผ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”.

๊ฐ•ํ•œ ๊ฒฐํ•ฉ์€ ํด๋ž˜์Šค ๊ฐ„ ์˜์กด์„ฑ์ด ๋†’์•„ ์ฝ”๋“œ ๋ณ€๊ฒฝ๊ณผ ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ๋А์Šจํ•œ ๊ฒฐํ•ฉ์€ ์ธํ„ฐํŽ˜์ด์Šค, DI, ๋˜๋Š” ํŒฉํ† ๋ฆฌ ํŒจํ„ด ๋“ฑ์„ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ค„์ด๊ณ , ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ์„ค๊ณ„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Question

์˜์กด์„ฑ ์ฃผ์ž…(DI)์ด ๋А์Šจํ•œ ๊ฒฐํ•ฉ์— ๊ธฐ์—ฌํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”.

DI๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ๋ฅผ ์™ธ๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ํด๋ž˜์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

3. ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”

์ง๋ ฌํ™”(Serialization)

  • ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  • ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์‹œ ๊ฐ์ฒด๋ฅผ ์ „์†ก ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€ํ™˜

์—ญ์ง๋ ฌํ™”(Deserialization)

  • ์ง๋ ฌํ™”๋œ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณต์›ํ•˜๋Š” ๊ณผ์ •
  • ์ €์žฅ๋œ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณต์›
  • ๋„คํŠธ์›Œํฌ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜

Question

์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ง๋ ฌํ™”๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ  ์—ญ์ง๋ ฌํ™”๋Š” ๋ฐ˜๋Œ€๋กœ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ๊ฐ์ฒด๋ฅด ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

Question

์ง๋ ฌํ™”์˜ ์žฅ/๋‹จ์ 

์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ์ „์†ก์‹œ์— ๊ฐ„ํŽธํ•˜๊ณ  ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์ง๋ ฌํ™”ํ•˜๊ฑฐ๋‚˜ ์—ญ์ง๋ ฌํ™” ํ•˜๋Š” ๊ณผ์ •์—์„œ cpu ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•ด ์„ฑ๋Šฅ์ด ์ €ํ•˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Question

์ง๋ ฌํ™”๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

ํด๋ž˜์Šค๊ฐ€ Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋„ ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

4. ์ž๋ฐ”์˜ ๋™์‹œ์„ฑ ์ด์Šˆ(๊ณต์œ ์ž์› ์ ‘๊ทผ)

๋™์‹œ์„ฑ์ด๋ž€?

  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ
  • ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์—ฌ๋Ÿฌ ์ž‘์—…์ด ๊ต์ฐจํ•˜๋ฉด์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ

๊ณต์œ ์ž์›๊ณผ ๋™์‹œ์„ฑ ์ด์Šˆ

  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ์ž์›
  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž์›์„ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ ค ํ•  ๋•Œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๋‚˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

์ฃผ์š” ๋™์‹œ์„ฑ ์ด์Šˆ

  • ๊ฒฝ์Ÿ ์ƒํƒœ(RaceCondition) : ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜์—ฌ ๋™์‹œ์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฎ์–ด์”Œ์šฐ๋Š” ๊ฒฝ์šฐ
  • ๊ต์ฐฉ ์ƒํƒœ(DeadLock) : ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ์˜ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐ์ƒํƒœ
  • ๊ธฐ์•„ ์ƒํƒœ(Starvation) : ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์Šค๋ ˆ๋“œ๊ฐ€ cpu ์‹œ๊ฐ„์„ ๋ฐฐ์ •๋ฐ›์ง€ ๋ชปํ•ด ๋ฌดํ•œ ์ง€์—ฐ๋˜๋Š” ํ˜„์ƒ

Question

์ž๋ฐ”์˜ ๋™์‹œ์„ฑ ์ด์Šˆ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ์ƒํ™ฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ์ด์Šˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ๊ณผ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Question

Deadlock์€ ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ฐ๋“œ๋ฝ์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž์›์— ์ ‘๊ทผํ•˜์˜€์„ ๋•Œ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐ์— ๋น ์ง€๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ ‘๊ทผ ์ˆœ์„œ๋ฅผ ๊ณ ์ •ํ•˜๊ฑฐ๋‚˜, ํƒ€์ž„์•„์›ƒ์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, lock์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Question

๋™๊ธฐํ™”์™€ lock์˜ ์ฐจ์ด๋Š”?

๋™๊ธฐํ™”๋Š” JVM์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋ฉฐ, Lock์€ JAVA API์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ๋” ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

5. ์ž๋ฐ”์˜ Mutable ๊ฐ์ฒด์™€ Immutable ๊ฐ์ฒด์˜ ์ฐจ์ด์ 

Mutable ๊ฐ์ฒด

  • ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
  • ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ํ•„๋“œ๊ฐ’์„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ , ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
  • StringBuilder, ArrayList, HashMap ๋“ฑ

Immutable ๊ฐ์ฒด

  • ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด
  • ์ƒํƒœ ๋ณ€๊ฒฝ์‹œ ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€
  • ์•ˆ์ „ํ•œ ์Šค๋ ˆ๋“œ ์ž‘์—… ๊ฐ€๋Šฅ(๋™์‹œ์„ฑ ๋ฌธ์ œ ์—†์Œ), ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€
  • String, Integer, LocalDate

Question

Mutable ๊ฐ์ฒด์™€ Immutable ๊ฐ์ฒด์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

Mutable๊ฐ์ฒด๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ ๋Œ€ํ‘œ์ ์œผ๋กœ StringBuilder, List, HashMap ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Immutable ๊ฐ์ฒด๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋กœ String, Integer ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Mutable ๊ฐ์ฒด๋Š” ์ฃผ๋กœ ์ƒํƒœ๊ฐ€ ๋งŽ์ด ๋ณ€ํ•˜๋Š” ๊ฐ์ฒด์— ์‚ฌ์šฉ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์—” ํšจ์œจ์ ์ด์ง€๋งŒ ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Immutable ๊ฐ์ฒด๋Š” ์ฃผ๋กœ ์ƒํƒœ๊ฐ€ ๋งŽ์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์— ์‚ฌ์šฉ๋˜๋ฉฐ ๋™์‹œ์„ฑ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ์•ˆ์ „ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Question

Immutable ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์–ด๋–ค Java ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

final ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ฑฐ๋‚˜, private์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Question

Immutable ๊ฐ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์–ด๋–ค ๋‹จ์ ์ด ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ทน๋ณตํ•  ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์บ์‹ฑ์ด๋‚˜ Builder ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. ์ž๋ฐ”์—์„œ null์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•

Optional

  • Optional ํด๋ž˜์Šค๋Š” null ๊ฐ’์„ ๊ฐ์‹ธ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Optional์„ ์‚ฌ์šฉํ•˜๋ฉด null ์ฒดํฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ , null์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์˜ˆ์™ธ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Null ์ฒดํฌ ๋ฉ”์„œ๋“œ

  • Objects ํด๋ž˜์Šค์˜ isNull()๊ณผ nonNull() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒดํฌ

Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž

  • ?? ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ
  • null ์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜

Question

Java์—์„œ null์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ช…์‹œ์ ์œผ๋กœ ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•ด ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ , java 8 ์ดํ›„๋ถ€ํ„ฐ ๋„์ž…๋œ Optional ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” Objects์˜ isNull๊ณผ nonNull๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, @Nullable, @NonNull ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

7. JDK์™€ JRE์˜ ์ฐจ์ด์ 

JDK(Java Development Kit)

  • JDK๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•„์š”ํ•œ ๋ชจ๋“  ๋„๊ตฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•œ ๊ฐœ๋ฐœ ํ‚คํŠธ
  • JRE, Java ์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ, javadoc ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ
  • Java ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์ปดํŒŒ์ผํ•˜๋ฉฐ ๋””๋ฒ„๊น…ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

JRE(Java Runtime Enviorment)

  • Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด
  • JVM, Java ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌ์„ฑ
  • Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์ œ๊ณต
  • Java ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋„๊ตฌ๋Š” ํฌํ•จํ•˜์ง€ ์•Š๊ณ , ๋‹จ์ง€ ์‹คํ–‰๋งŒ์„ ์œ„ํ•œ ํ™˜๊ฒฝ

Question

JDK์™€ JRE์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

JDK๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ ๋ชจ์Œ์ด๋ฉฐ, JRE๋Š” Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค.


Question

JVM๊ณผ JRE, JDK์˜ ๊ด€๊ณ„๋ฅผ ๊ณ„์ธต์ ์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ , JDK ์—†์ด JRE๋งŒ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ด๋ณด์„ธ์š”.

JVM์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋‹ด๋‹นํ•˜๋Š” ํ•ต์‹ฌ ์—”์ง„์ž…๋‹ˆ๋‹ค. JVM์€ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ฑฐ๋‚˜ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. JRE๋Š” JVM๊ณผ ์‹คํ–‰์— ํ•„์š”ํ•œ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JDK๋Š” JRE์— ๊ฐœ๋ฐœ ๋„๊ตฌ(์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ ๋“ฑ)๋ฅผ ์ถ”๊ฐ€ํ•œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ์ด์Šˆ: JRE๋งŒ ์žˆ์„ ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ์ž๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜(javac)ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ ์ „ ์†Œ์Šค์ฝ”๋“œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ JDK๊ฐ€ ์—†์œผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ์ œํ•œ: JRE๋งŒ ์žˆ์œผ๋ฉด ๋Ÿฐํƒ€์ž„ ์ค‘ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๊ฑฐ๋‚˜ ๋””๋ฒ„๊น… ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ž๋™ํ™” ๋ฌธ์ œ: CI/CD์™€ ๊ฐ™์€ ๋นŒ๋“œ ์ž๋™ํ™” ํ™˜๊ฒฝ์—์„œ๋Š” JDK๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ์™€ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐํฌ ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

Question

๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž๋ฐ” ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์—์„œ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ๊ณผ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์€ ๊ฐ๊ฐ ์–ด๋””์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ ํ•ฉํ• ๊นŒ์š”? ๊ตฌ์ฒด์ ์ธ ์‚ฌ๋ก€๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ์„œ๋น„์Šค ๊ณ„์ธต์ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต์—์„œ๋Š” ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ํ™œ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒฐ์ œ ์„œ๋น„์Šค์—์„œ ๋‹ค์–‘ํ•œ ๊ฒฐ์ œ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด PaymentGateway ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ•ํ•œ ๊ฒฐํ•ฉ: ๋ฐ˜๋Œ€๋กœ, ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์ด ์ค‘์š”ํ•œ ์บ์‹ฑ ๋กœ์ง์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์—์„œ๋Š” ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ถ”์ƒํ™”๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Redis ์บ์‹ฑ ๋กœ์ง์—์„œ ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Question

์ž๋ฐ” ์ง๋ ฌํ™”์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์ด ๊ฐ€์ง€๋Š” ๋‹จ์ ์€ ๋ฌด์—‡์ด๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์•ˆ ๊ธฐ์ˆ ์—๋Š” ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

์„ฑ๋Šฅ ๋ฌธ์ œ: ๊ธฐ๋ณธ ์ง๋ ฌํ™”๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๋ฌธ์ œ: ์—ญ์ง๋ ฌํ™” ๊ณผ์ •์—์„œ ์•…์˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด java.io.ObjectInputStream์ด ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ: ํด๋ž˜์Šค ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, serialVersionUID๊ฐ€ ๋งž์ง€ ์•Š์œผ๋ฉด ์ง๋ ฌํ™”๋œ ๊ฐ์ฒด๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์–ด๋ ค์›€: ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•์‹์€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์—†๊ณ , ํŠน์ • ๋ชฉ์ (์˜ˆ: ๋ฐ์ดํ„ฐ ๊ตํ™˜)์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์•ˆ ๊ธฐ์ˆ : JSON ๋˜๋Š” XML: Jackson, Gson๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜. Protocol Buffers, Avro, Thrift: ๊ณ ์„ฑ๋Šฅ ์ด์ง„ ์ง๋ ฌํ™” ํ˜•์‹์œผ๋กœ, ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. Kryo: ์ž๋ฐ”์˜ ๋Œ€์ฒด ์ง๋ ฌํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์†๋„์™€ ํฌ๊ธฐ ๋ฉด์—์„œ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.