๊ฐœ๋ฐœ์ž HOON
๐Ÿ› HOON DEVLog
๊ฐœ๋ฐœ์ž HOON
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ˜Ž ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ (137)
    • ๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„ (7)
    • ๐Ÿฆ” ์ทจ์—…์ค€๋น„ ๊ธฐ๋ก (7)
    • โ˜• ์ž๋ฐ” : JAVA (5)
    • ๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS (80)
    • ๐ŸŒฑ ๋ฐฑ์—”๋“œ : Backend (13)
    • ๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS (11)
    • ๐Ÿ—‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : DB (1)
    • ๐Ÿƒ‍โ™‚๏ธ DEVLOG (8)
    • โš™๏ธ Trouble Shooting (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • GitHub
  • Resume

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๊ฐœ๋ฐœ์ž HOON

๐Ÿ› HOON DEVLog

[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฅ ์ž๋ฐ”(Java)
๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„

[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฅ ์ž๋ฐ”(Java)

2022. 10. 31. 14:39

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ..

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

 

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ์ž๋ฐ” ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ’ก Java์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • JVM ์œ„์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— OS์— ์ข…์†์ ์ด์ง€ ์•Š๊ณ , ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ, ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค๋กœ๋”์— ์˜ํ•ด ๋™์  ๋กœ๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•„์š”ํ•œ ์‹œ์ ์— ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , JVM์— ์˜ํ•ด ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜๋ฏ€๋กœ ํ•œ ๋ฒˆ์˜ ์ปดํŒŒ์ผ๋ง์„ ๊ฑฐ์น˜๋Š” ์–ธ์–ด์— ๋น„ํ•ด์„œ ์กฐ๊ธˆ ๋А๋ฆฝ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก JVM์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

JVM์€ Java Virtual Machine์˜ ์ค„์ž„๋ง๋กœ, OS์™€ Java Application ์‚ฌ์ด๋ฅผ ์ค‘์žฌํ•ด์ฃผ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค.

JVM์€ ํฌ๊ฒŒ ์‹คํ–‰์— ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ Runtime Data Area๋กœ ๋งํ‚น ํ•˜๊ณ  ๋กœ๋”ฉ์„ ํ•ด์ฃผ๋Š” ClassLoader, ์‹ค์ œ ์‹คํ–‰๊ณผ ๋ฒˆ์—ญ์„ ๋‹ด๋‹นํ•˜๋Š” Execution Engine, ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ๋กœ์จ ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” Garbage Collector, ๊ฐ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๋ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” Runtime Data Area๋กœ ๊ตฌ์„ฑ์ด ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java Application์ด JVM์—์„œ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

1) JVM์€ OS๋กœ๋ถ€ํ„ฐ ์ ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ(Runtime Data Area)๋ฅผ ํ• ๋‹น ๋ฐ›์Œ.

2) ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ(.java)๋ฅผ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac)์— ์˜ํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)ํŒŒ์ผ๋กœ ๋ณ€ํ™˜

3) Class Loader๋ฅผ ํ†ตํ•ด .class ํŒŒ์ผ์„ Runtime Data Area๋กœ ๋กœ๋”ฉ

4) ๋กœ๋”ฉ๋œ class ํŒŒ์ผ์„ Execution Engine์„ ํ†ตํ•ด ํ•ด์„ ๋ฐ ์‹คํ–‰

 

 

 

๐Ÿ’ก JVM์˜ ๋ฉ”๋ชจ๋ฆฌ(Runtime Data Area)๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

 

  • ๋ฉ”์„œ๋“œ(static) ์˜์—ญ
    • ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์˜ ํŒŒ์ผ(.class)์„ ์ฝ์–ด๋“ค์—ฌ, ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ •๋ณด(๋ฐ”์ดํŠธ ์ฝ”๋“œ)๋ฅผ ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ
    • ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ, static ๋ณ€์ˆ˜, final ๋ณ€์ˆ˜ ๋“ฑ์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.
  • JVM ์Šคํƒ ์˜์—ญ
    • ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ์กด์žฌํ•˜์—ฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ํ• ๋‹น
    • ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ์—ฐ์‚ฐ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ
    • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ๊ฐœ๋ณ„์  ์Šคํƒ ์ƒ์„ฑ
  • JVM ํž™ ์˜์—ญ
    • ๋Ÿฐํƒ€์ž„ ์‹œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์˜์—ญ
    • new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด ์ €์žฅ
    • ์ฐธ์กฐ๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋Š” GC(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ)์˜ ๋Œ€์ƒ
  • pc register
    • ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ํ•  ์Šคํƒ ํ”„๋ ˆ์ž„์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅ
  • Native Method Stack
    • C/C++ ๋“ฑ์˜ Low level ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šคํƒ

 

 

 

๐Ÿ’ก Garbage Collector๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์„ ํƒ์ง€ํ•ด ํ•ด์ œํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Java์—์„œ ๋™์  ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋Š” ์˜์—ญ์€ Heap ์˜์—ญ์ด๋ฏ€๋กœ, JVM์˜ GC์˜ ์ž‘๋™ ๋Œ€์ƒ์€ Heap ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

๊ธฐ์กด์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜์™€ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋™์ ๋ณ€์ˆ˜ ๊ด€๊ณ„์—์„œ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ์ข…๋ฃŒ์— ์˜ํ•ด pop๋˜๊ณ  ๋‚˜๋ฉด ํž™ ์˜์—ญ์— ๋™์  ๋ณ€์ˆ˜๋งŒ ๋‚จ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ Unreachable Object๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณ , ์ด ๋ณ€์ˆ˜๊ฐ€ GC์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.

 

GC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€
  • ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
  • ํ•ด์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ์ผํžˆ ๋™์ ๋ณ€์ˆ˜์˜ ์ œ๊ฑฐ ์„ ์–ธ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋จ
  • ๊ทธ๋Ÿฌ๋‚˜, ๊ฐœ๋ฐœ์ž๊ฐ€ GC๊ฐ€ ์–ธ์ œ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์—†์Œ
  • ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ GC ์ž‘์—…์— ๋‚ด์ค˜์•ผ ํ•˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ

 

 

Java๋Š” Mark and Sweep ๋ฐฉ์‹์œผ๋กœ GC๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๋ฆผ์—์„œ ๋‚˜์˜จ Root Space๋Š” GC์˜ ์‹œ์ž‘์ง€๋กœ Stack, native method stack, method area๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)

Stack์˜ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ์–ด๋–ค ํž™์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š”์ง€ ๋งˆํ‚นํ•ฉ๋‹ˆ๋‹ค. ๋งˆํ‚นํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด ๋˜ํ•œ ๋งˆํ‚นํ•ฉ๋‹ˆ๋‹ค. ๋งˆํ‚นํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ Heap์—์„œ ์ œ๊ฑฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿ’ก Java์—์„œ, ==์™€ equals์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ๊ณ„์‹œ๋‚˜์š”?

๋”๋ณด๊ธฐ

'==' ์—ฐ์‚ฐ์€ ์ฐธ์กฐ ๋น„๊ต๋กœ, ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.

'equals' ์—ฐ์‚ฐ์€, ๋‘ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ฐ’์ด ๊ฐ™์€ ์ง€ ๋‚ด์šฉ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํƒ€์ž…์— ๋Œ€ํ•ด์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ๊ฐ์ฒด ๋น„๊ต์‹œ overrideํ•ด์„œ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

== : ๋ณธ์งˆ๊นŒ์ง€ ๊ฐ™์Œ. (๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ๋ฐ์ดํ„ฐ) / equals : ๊ฐ’๋งŒ ๊ฐ™์Œ.

 

 

 

๐Ÿ’ก Java์˜ ์ ‘๊ทผ ์ œํ•œ์ž์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • public : ์ ‘๊ทผ์— ์ œํ•œ์ด ์—†์Œ
  • private : ์ž๊ธฐ ์ž์‹  ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • default : ๋™์ผํ•œ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • protected : ๋™์ผํ•œ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ + ์ƒ์†์„ ์ด์šฉํ•œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

 

 

๐Ÿ’ก Java์—์„œ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ
  • ์›์‹œ์ž๋ฃŒํ˜• ํƒ€์ž…(Primitive Type)
    • ๊ธฐ๋ณธ ํƒ€์ž…์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ๊ณ ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ Stack ์˜์—ญ ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ์ •์ˆ˜ํ˜• : byte, short, int, long
    • ์‹ค์ˆ˜ํ˜• : float, double
    • ๋…ผ๋ฆฌํ˜• : boolean
    • ๋ฌธ์žํ˜• : char
  • ์ฐธ์กฐ ํƒ€์ž…(Reference Type)
    • ์›์‹œ์ž๋ฃŒํ˜•์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ์ฐธ์กฐํ˜•์ด๋‹ค.
    • String๊ณผ ๋ฐ•์‹ฑ ํƒ€์ž…์ธ Integer ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ฐธ์กฐ ํƒ€์ž…์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์ด๊ณ , ๋™์ ์ด๋ฏ€๋กœ Heap ์˜์—ญ ์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋Š” Heap ์˜์—ญ์—์„œ ๊ด€๋ฆฌ๋˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’์€ Stack ์˜์—ญ์— ๋‹ด๊น๋‹ˆ๋‹ค.
    • new ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํƒ€์ž…
    • String๊ณผ ๋ฐฐ์—ด์€ ์ผ๋ฐ˜์ ์ธ ์ฐธ์กฐ ํƒ€์ž…๊ณผ ๋‹ฌ๋ฆฌ new ์—†์ด ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ฐธ์กฐํƒ€์ž…์ž…๋‹ˆ๋‹ค.
    • ๋” ์ด์ƒ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†์„ ๋•Œ GC์— ์˜ํ•ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์˜ hashcode()์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋‘ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ๊ฐ์ฒด์ธ์ง€ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , Heap ์˜์—ญ์— ์ €์žฅ๋œ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์˜ Wrapper Class์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์›์‹œ์ž๋ฃŒํ˜• ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋กœ, ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์œ„ํ•ด ์ •์˜๋œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ, ์ธ์Šคํ„ด์Šค ๋‚ด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์›์‹œ์ž๋ฃŒํ˜• ๋ž˜ํผํด๋ž˜์Šค
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

 

๐Ÿ’ก Boxing๊ณผ, UnBoxing์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ๋ž˜ํผํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ•์‹ฑ, ๋ž˜ํผํด๋ž˜์Šค์˜ ์ธ์Šคํ„ฐ์Šค๋ฅผ ๋‹ค์‹œ ๊ธฐ๋ณธ ํƒ€์ž…์œผ๋กœ ๊บผ๋‚ด๋Š” ๊ณผ์ •์„ ์–ธ๋ฐ•์‹ฑ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

- ๋ž˜ํผ ํด๋ž˜์Šค ๋‚ด์˜ ๊ฐ’์„ ๋น„๊ตํ•  ๊ฒฝ์šฐ์—๋Š” ==์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? equals๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

== ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฐธ์กฐ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ด ๊ฐ’์„ ๋น„๊ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. equals๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šค ๋‚ด์˜ ๊ฐ’์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

public class Wrapper03 {
    public static void main(String[] args) {
      Integer num1 = new Integer(10);
      Integer num2 = new Integer(20);
      Integer num3 = new Integer(10);

      System.out.println(num1 < num2);       // true
      System.out.println(num1 == num3);      // false
      System.out.println(num1.equals(num3)); // true
      
      Integer num = new Integer(17); // ๋ฐ•์‹ฑ
      int n = num.intValue();        // ์–ธ๋ฐ•์‹ฑ
      System.out.println(n); // ์ถœ๋ ฅ ๊ฐ’: 17


      Character ch = 'X'; // Character ch = new Character('X'); : ์˜คํ† ๋ฐ•์‹ฑ
      char c = ch;        // char c = ch.charValue();           : ์˜คํ† ์–ธ๋ฐ•์‹ฑ
      System.out.println(c); // ์ถœ๋ ฅ ๊ฐ’: X
    }
}

 

 

 

๐Ÿ’ก Java์˜ static ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

ํด๋ž˜์Šค๋‹น ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๊ณ , ๋™์ผํ•œ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์— ์˜ํ•ด ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์ด ์ƒ๊ธฐ๊ธฐ ์ „์— ์ด๋ฏธ ์ƒ์„ฑ๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ์‹œ์— ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์˜ main ๋ฉ”์†Œ๋“œ๊ฐ€ static์ธ ์ด์œ ์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹œ๋‚˜์š”? (public static void main(){String args[]})

๋”๋ณด๊ธฐ

static ๋ฉค๋ฒ„๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ, ํด๋ž˜์Šค ๋กœ๋”์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Runtime Data Area์—์„œ Method Area(=Class Area, Static Area)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์˜์—ญ์— static ํ‚ค์›Œ๋“œ๋ฅผ ๊ฐ€์ง„ ๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ JVM์€ ๋ณ„๋„๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„, Method Area์— ๋กœ๋“œ๋œ main()์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก final๊ณผ finally, finalize์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹ ๋‹ค๋ฉด ์„ค๋ช… ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ
  • final ํ‚ค์›Œ๋“œ
    • ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ ํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.
    • ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜์— ์ ์šฉ ์‹œ
      • ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์ฐธ์กฐ ๋ณ€์ˆ˜์— ์ ์šฉ ์‹œ
      • ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ํž™ ๋‚ด์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ฉ”์„œ๋“œ์— ์ ์šฉ ์‹œ
      • ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์—†๋‹ค.(์˜ค๋ฒ„๋กœ๋”ฉ์€ ๊ฐ€๋Šฅ)
    • ํด๋ž˜์Šค์— ์ ์šฉ ์‹œ
      • ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • finally ํ‚ค์›Œ๋“œ
    • try catch ๋ธ”๋ก ๋’ค์—์„œ ํ•ญ์ƒ ์‹คํ–‰๋  ์ฝ”๋“œ ๋ธ”๋ก์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • finalize ๋ฉ”์„œ๋“œ
    • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋” ์ด์ƒ์˜ ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•˜๊ฒ ๋‹ค๊ณ  ๊ฒฐ์ •ํ•˜๋Š” ์ˆœ๊ฐ„ ํ˜ธ์ถœ๋œ๋‹ค.

 

 

 

๐Ÿ’ก try-catch-finally์˜ ๋‹จ์ ๊ณผ, ์ด๋กœ ์ธํ•ด ๋‚˜์˜จ ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹ ๋‹ค๋ฉด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

try-catch-finally ๊ตฌ๋ฌธ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, ์ƒ์„ฑ์€ try์—์„œ ํ•˜๊ณ  ๋ฐ˜๋‚ฉ์€ finally์—์„œ ํ•˜๋‹ค๋ณด๋‹ˆ ์‹ค์ˆ˜์˜ ๋ฐœ์ƒ ์—ฌ์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ตฌ๋ฌธ์œผ๋กœ try-with-resources๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. try ์˜†์— ๊ด„ํ˜ธ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋ฉด, ๋”ฐ๋กœ ๋ฐ˜๋‚ฉ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜๋‚ฉํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์˜ ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์ œ๋„ค๋ฆญ(Generic)์€ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ง€์ •๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ํƒ€์ž…(Specific)์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•„์š”์— ์˜ํ•œ ์ง€์ •์„ ๊ทธ๋•Œ ๊ทธ๋•Œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜ ํƒ€์ž…(Generic)์ธ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

  • ์ž˜๋ชป๋œ ํƒ€์ž…์ด ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ํƒ€์ž…์„ ์ฒดํฌํ•˜๊ณ  ๋ณ€ํ™˜ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๊ด€๋ฆฌํ•˜๊ธฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
ํƒ€์ž… ์„ค๋ช…
<T> Type
<E> Element
<K> Key
<V> Value
<N> Number

์œ„ ํƒ€์ž… ๋ช…์„ธ๋Š” ์•”๋ฌต์ ์ธ ๊ทœ์น™์ผ ๋ฟ, ๋‹ค๋ฅธ ๊ฐ’์„ ์ง‘์–ด๋„ฃ์–ด๋„ ์ž‘๋™์€ ์ž˜ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์˜ ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • ์ง๋ ฌํ™”
    • ์ž๋ฐ” ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์˜ ์ž๋ฐ” ์‹œ์Šคํ…œ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”์ดํŠธ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ 
    • ์กฐ๊ฑด
      • ์ž๋ฐ” ๊ธฐ๋ณธ ํƒ€์ž…
      • Serializable ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด
    • ObjectOutputStream ๊ฐ์ฒด๋ฅผ ์ด์šฉ
  • ์—ญ์ง๋ ฌํ™”
    • ๋ฐ”์ดํŠธ๋กœ ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ 
    • ObjectInputStream ๊ฐ์ฒด๋ฅผ ์ด์šฉ

 

 

 

๐Ÿ’ก ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์ถ”์ƒํด๋ž˜์Šค๋Š”, abstract ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์„ ์–ธํ•œ ํด๋ž˜์Šค๋กœ, ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์ตœ์†Œ ํ•œ ๊ฐœ ์ด์ƒ ํฌํ•จํ•œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

์ถ”์ƒ๋ฉ”์†Œ๋“œ๋Š”, abstract ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์›ํ˜•๋งŒ ์„ ์–ธ๋˜๊ณ  ๋‚ด๋ถ€ ์ฝ”๋“œ๋Š” ์ž‘์„ฑํ•˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

์ถ”์ƒํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ถ”์ƒ๋ฉ”์†Œ๋“œ ์™ธ์˜ ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๊ณ , ์ถ”์ƒํด๋ž˜์Šค์˜ ์‚ฌ์šฉ ์ฃผ ๋ชฉ์ ์€ ๊ด€๋ จ์„ฑ์ด ๋†’์€ ํด๋ž˜์Šค ๊ฐ„์˜ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ํ™•์žฅํ•˜๊ณ  ์‹ถ์€ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค๋Š”, interface ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์„ ์–ธํ•˜๋ฉฐ default์™€ static์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์™€ ์ƒ์ˆ˜๋งŒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

interface ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ, abstract public์ด ์ƒ๋žต๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ƒ์ˆ˜ ํ•„๋“œ๋Š” public static final์ด ์ƒ๋žต๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ด€๋ จ์„ฑ์ด ์—†๋Š” ํด๋ž˜์Šค๋“ค์˜ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ž์‹ ์— ๋งž๊ฒŒ ๊ตฌํ˜„์„ ๊ฐ•์ œํ•˜๋Š”๋ฐ์— ๋ชฉ์ ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Error์™€ Exception์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

 


  Error Exception
ํŒจํ‚ค์ง€ java.lang.error java.lang.exception
๋ฐœ์ƒ์‹œ์  ๋Ÿฐํƒ€์ž„์—์„œ ๋ฐœ์ƒ, ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ์•Œ ์ˆ˜ ์—†๋‹ค. Checked Exception์€ ์ปดํŒŒ์ผ ์‹œ์ ์—,
Unchcked Exception์€ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๋ณต๊ตฌ ์—๋Ÿฌ๋Š” ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅ try-catch์„ ์ด์šฉํ•˜์—ฌ ๋ณต๊ตฌ ๊ฐ€๋Šฅ
ํƒ€์ž… ๋ชจ๋“  Error๋Š” Unchecked Type checked Type, Unchecked Type์œผ๋กœ ๋ถ„๋ฅ˜
์˜ˆ์‹œ OutOfMemory, StackOverFlow checked Exception, unchecked Exception

 

 

 

๐Ÿ’ก String๊ณผ StringBuilder, StringBuffer์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

1) String

์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋™์  ๋ณ€์ˆ˜(์ธ์Šคํ„ด์Šค)๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. String์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์€, ๋‚ด๋ถ€์ ์œผ๋กœ private final char[] ํ˜•ํƒœ์ด๋ฏ€๋กœ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. String์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์œผ๋กœ '+'๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋‘ String์„ ์—ฐ๊ฒฐํ•œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „๊นŒ์ง€ ์ƒ์„ฑ๋œ String ๊ฐ์ฒด๋“ค์€ Heap์— ๊ณ„์†ํ•ด์„œ ๋จธ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ์น˜๋ช…์ ์ž…๋‹ˆ๋‹ค.

 

2) StringBuilder

String๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€๋ณ€์„ฑ์„ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. append(), delete()๋“ฑ์˜ method๋ฅผ ์‚ฌ์šฉํ•ด ๋™์ผ ๊ฐ์ฒด ๋‚ด์—์„œ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.  ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ ํ•ฉํ•˜์ง€ ์•Š์ง€๋งŒ, ๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๋งŒํผ ๋‹จ์ผ์“ฐ๋ ˆ๋“œ์—์„œ์˜ ์„ฑ๋Šฅ์€ StringBuffer๋ณด๋‹ค ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

3) StringBuffer

String๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€๋ณ€์„ฑ์„ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. append(), delete()๋“ฑ์˜ method๋ฅผ ์‚ฌ์šฉํ•ด ๋™์ผ ๊ฐ์ฒด ๋‚ด์—์„œ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ thread-safeํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก new String("")์™€ ""์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ด€์ ์—์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

""์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ดˆ๊ธฐํ™” ํ•˜๊ฒŒ ๋˜๋ฉด, Java Heap ๋ฉ”๋ชจ๋ฆฌ์˜ String Pool์— ์ €์žฅ์ด ๋ฉ๋‹ˆ๋‹ค.

String msg1 = "hello";
String msg2 = "hello";

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, "hello"๋Š” Java Heap ๋ฉ”๋ชจ๋ฆฌ์˜ String Pool์— ์ €์žฅ๋˜๊ณ , msg1๊ณผ msg2๋Š” ๊ฐ™์€ String pool ๋‚ด์˜ "hello"๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋ฐ˜๋ฉด์—, new String("")์€ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

String msg3 = new String("hello");
String msg4 = new String("hello");

new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์ด ์ƒ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, String Pool์ด ์•„๋‹Œ, ๊ทธ๋ƒฅ Heap ์˜์—ญ์— ๊ฐ๊ฐ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ msg3์™€ msg4๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. msg3.intern() ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด string pool์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ตณ์ด ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด GC ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค, String Pool๋กœ ๋งŒ๋“ค์–ด ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ์ธก๋ฉด์—์„œ ๋”์šฑ ์œ ๋ฆฌํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java ๋ฆฌํ”Œ๋ ‰์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์•„๋‹Œ, ๋Ÿฐํƒ€์ž„ ์‹œ๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ์˜ ์ •์˜๋ฅผ ๋™์ ์œผ๋กœ ์ฐพ์•„์„œ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ์ž ์ฐพ๊ธฐ(getDeclaredConstructor()), ๋ฉ”์†Œ๋“œ ์ฐพ๊ธฐ(getDeclaredMethods()), ํ•„๋“œ ์ฐพ๊ณ  ํ•„๋“œ ๋ณ€๊ฒฝ(getDeclaredFields, set) ๋“ฑ ๋Ÿฐํƒ€์ž„ ์‹œ๊ฐ„์— ๋™์ ์œผ๋กœ ํ•ด๋‹น ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

 

- ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์‚ฌ์šฉํ•  instance๋ฅผ ์„ ํƒํ•˜๊ณ  ๋™์ž‘์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค.

- ์ปดํŒŒ์ผ ์‹œ์ ์ด ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์žก๊ธฐ ๋–„๋ฌธ์— ์ปดํŒŒ์ผ ํƒ€์ž„์— ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

- ์ ‘๊ทผ ์ œ์–ด์ž๋กœ ์บก์Аํ™”๋œ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ธฐ์กด ๋™์ž‘๋ฐฉ์‹์„ ๋ฌด์‹œํ•˜๊ณ  ๊นจ๋œจ๋ฆด ์ˆ˜ ์žˆ์–ด ์œ„ํ—˜์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋”ฉํ•˜์—ฌ ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ
  • ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„ ํ•„๋“œ, ๋ฉ”์„œ๋“œ ๋“ฑ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์–ป์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ

 

Annotation ๊ฐœ๋…๊ณผ ํ•จ๊ป˜ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

Spring ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์˜ Stream API์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹œ๋‚˜์š”? ์•ˆ๋‹ค๋ฉด ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Collections Type์˜ ๋ฐ์ดํ„ฐ๋ฅผ Stream ๋ฉ”์†Œ๋“œ๋กœ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์„ ํ†ตํ•ด ์ •๋ ฌ ํ˜น์€ ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•ด์ฃผ๋Š” API ์ž…๋‹ˆ๋‹ค.

  • parallel ๋ฉ”์„œ๋“œ ์ œ๊ณต์„ ํ†ตํ•ด ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ๊ฐ€ ๊ฐ€๋Šฅ
    • ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐœ๋ณ„ ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋†€๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์ผํ•˜๋Š” ์Šค๋ ˆ๋“œ์˜ ์ž‘์—…์„ ๊ฐ€์ ธ์™€ ์ˆ˜ํ–‰
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค(Immutable)
    • ์›๋ณธ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•  ๋ฟ, ์›๋ณธ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ž‘์—…์„ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋”ฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ตœ์ข… ์—ฐ์‚ฐ ํ›„ stream์ด ๋‹ซํžˆ๋ฏ€๋กœ ์ผํšŒ์šฉ ์ด๋‹ค.

 

์—ฐ์‚ฐ์˜ ๊ตฌ์กฐ๋Š” Stream ์ƒ์„ฑ → ์ค‘๊ฐ„์—ฐ์‚ฐ → ์ตœ์ข…์—ฐ์‚ฐ ์ˆœ์„œ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์ค‘๊ฐ„์—ฐ์‚ฐ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ํ•„ํ„ฐ๋ง, ๋ณ€ํ™˜, ์ œํ•œ, ์ •๋ ฌ, ์—ฐ์‚ฐ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ํ™•์ธ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ์—ฐ์‚ฐ์€ Stream ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ๋กœ์จ, ์ถœ๋ ฅ, ์†Œ๋ชจ, ๊ฒ€์ƒ‰, ๊ฒ€์‚ฌ, ํ†ต๊ณ„, ์—ฐ์‚ฐ, ์ˆ˜์ง‘ ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ค‘๊ฐ„ ์—ฐ์‚ฐ ์ž‘์—…์€ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ข…๊ฒฐ์ฒ˜๋ฆฌ์˜ ์‹คํ–‰์ด ํ•„์š”ํ•  ๋•Œ ๋น„๋กœ์†Œ ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. (Lazy Evaluation)

 

 

 

๐Ÿ’ก Java์˜ Fork-Join Pool์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Task(์—…๋ฌด)๋ฅผ Fork(๋ถ„ํ• )์„ ํ†ตํ•ด ์ž‘์€ ์—…๋ฌด๋กœ ๋‚˜๋ˆ  ๋ฐฐ๋ถ„ํ•ด์„œ ์ผ์„ ํ•œ ํ›„์— ๋‹ค์‹œ Join(์ทจํ•ฉ)ํ•˜๋Š” ํ˜•ํƒœ์˜ ์“ฐ๋ ˆ๋“œ ํ’€์ž…๋‹ˆ๋‹ค.

 

Fork-Join Pool๋„ ๋‚ด๋ถ€์— inbound queue๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด inbound queue๋Š” ๊ฐ ์—…๋ฌด(Task)๊ฐ€ ์ €์žฅ๋˜๊ณ , ๊ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ฐ€์ ธ๊ฐ€ ์—…๋ฌด๋ฅผ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์™ผ์ชฝ์—์„œ ์—…๋ฌด๋ฅผ ์ œ์ถœํ•˜๋ฉด, ํ•˜๋‚˜์˜ inbound queue์— ๋ˆ„์ ๋˜๊ณ , A์™€ B ์“ฐ๋ ˆ๋“œ๋Š” ํ•ด๋‹น ์—…๋ฌด๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ผ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

A์™€ B๋Š” ๊ฐ์ž ์—…๋ฌด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” queue๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ž์‹ ์˜ ํ์— ์—…๋ฌด๊ฐ€ ์—†์œผ๋ฉด ์ƒ๋Œ€๋ฐฉ์˜ ํ์—์„œ ์—…๋ฌด๋ฅผ ๊ฐ€์ ธ์™€์„œ(steal) ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ตœ๋Œ€ํ•œ ๋†€๊ณ  ์žˆ๋Š” Thread๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์˜ Optional์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

NullPointerException(NPE)๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด null ์—ฌ๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ฝ”๋“œ๊ฐ€ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Optional<T> ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด NPE ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. null์ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๊ฐ์‹ธ๋Š” Wrapper ํด๋ž˜์Šค๋กœ, ์ฐธ์กฐํ•˜๋”๋ผ๋„ NPE๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Java์—์„œ์˜ MultiThread ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋ฐฉ๋ฒ•
    • ๋ฐฉ๋ฒ• 1: Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ run์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์„œ ์ •์˜ํ•œ๋‹ค.
    • ๋ฐฉ๋ฒ• 2: Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ Thread ์ƒ์„ฑ์ž์— ์ธ์ž๋กœ ๋„˜๊ธด๋‹ค.
    • ๋ฐฉ๋ฒ• 3: Callable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ FutureTask์— ํ•œ๋ฒˆ ๊ฐ์‹ธ์„œ Thread์˜ ์ธ์ž๋กœ ๋„˜๊ธด๋‹ค.
    • Runnable์€ Exception์ด ์—†๊ณ  ๋ฆฌํ„ด๊ฐ’๋„ ์—†์œผ๋‚˜ Callable์€ ๋ฆฌํ„ด๊ฐ’์ด ์žˆ๊ณ  Exception์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์Šค๋ ˆ๋“œ ์‹คํ–‰ ๋ฐฉ๋ฒ•
    • ๋ณดํ†ต start() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ˜ธ์ถœํ•˜๋Š”๋ฐ start ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ์‹คํ–‰ ๋Œ€๊ธฐ์—ด์— ์ €์žฅ๋œ ํ›„ ์ฐจ๋ก€๊ฐ€ ์˜ค๋ฉด ์‹คํ–‰๋œ๋‹ค.
    • ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, start๋Š” ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ƒˆ๋กœ์šด ํ˜ธ์ถœ ์Šคํƒ์„ ์ƒ์„ฑํ•ด์„œ ๊ทธ๊ณณ์— run ๋ฉ”์„œ๋“œ๋ฅผ ์˜ฌ๋ ค๋‘”๋‹ค. ์ดํ›„ ๊ทธ๊ณณ์—์„œ run ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ„๊ฐœ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์šด์˜ ์‹œ์—๋Š” ExecutorService์™€ Executors๋ฅผ ์ด์šฉํ•ด ์Šค๋ ˆ๋“œํ’€์„ ์ƒ์„ฑ ํ•˜์—ฌ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก ๋™๊ธฐํ™”๊ฐ€ ๋ฌด์—‡์ธ์ง€, Java์—์„œ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์ž๋ฐ”์—์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • synchronized : ์•ˆ์ „ํ•˜๊ฒŒ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋น„์šฉ์ด ๊ฐ€์žฅ ํฝ๋‹ˆ๋‹ค.
  • volatile : ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ์ž์›์€ ํ•˜๋‚˜์˜ thread๋งŒ์ด writeํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์Šค๋ ˆ๋“œ๋Š” read๋งŒ ํ•œ๋‹ค๋Š” ์ „์ œํ•˜์—๋งŒ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
    • volatile ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ ์ž์›์€ read, write ์ž‘์—…์ด CPU Cache Memory๊ฐ€ ์•„๋‹Œ Main Memory์—์„œ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.
    • ์ฆ‰, ์ž์›์„ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•˜๋‚˜๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ณต์œ ์ž์›์— ๋Œ€ํ•ด ๊ฐ๊ฐ ๋ฉ”๋ชจ๋ฆฌ๋ณ„๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ Main Memory์— ์žˆ๋Š” ๊ณต์œ ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋ฉด, ๊ณ„์‚ฐ๊ฐ’์ด ๋ฎ์–ด์”Œ์›Œ์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ๋™์‹œ ์ ‘๊ทผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • ์ •๋ฆฌํ•˜๋ฉด, ๊ฐ€์‹œ์„ฑ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋™์‹œ ์ ‘๊ทผ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • Atomic ํด๋ž˜์Šค๋Š” CAS(compare-and-swap)๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ์„ ํ•˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ writeํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. synchronized ๋ณด๋‹ค ์ ์€ ๋น„์šฉ์œผ๋กœ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • CAS ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” CPU์˜ CacheMemory์™€ MainMemory์— ์ €์žฅ๋œ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ, ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๊ต์ฒดํ•˜๊ณ , ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ์กด ๊ต์ฒด๊ฐ€ ์‹คํŒจ๋˜๊ณ , ์ด์— ๋Œ€ํ•ด ๊ณ„์† ์žฌ์‹œ๋„ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
    • CPU๊ฐ€ MainMemory์˜ ์ž์›์„ CPU Cache Memory๋กœ ๊ฐ€์ ธ์™€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜์–ด MainMemory์˜ ์ž์› ๊ฐ’์ด ๋ฐ”๋€Œ์—ˆ์„ ๊ฒฝ์šฐ ๊ธฐ์กด ์—ฐ์‚ฐ์„ ์‹คํŒจ์ฒ˜๋ฆฌํ•˜๊ณ , ์ƒˆ๋กœ ๋ฐ”๋€ MainMemory ๊ฐ’์œผ๋กœ ์žฌ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿƒ‍โ™‚๏ธ ๋‹ค๋ฅธ ์งˆ๋ฌธ ๋Œ€๋น„ ์ž๋ฃŒ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ - โ“ช ์ฒดํฌ๋ฆฌ์ŠคํŠธ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘  ์ž๋ฃŒ๊ตฌ์กฐ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ก ์•Œ๊ณ ๋ฆฌ์ฆ˜
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฃ ๋„คํŠธ์›Œํฌ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ค ์šด์˜์ฒด์ œ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฅ ์ž๋ฐ”(Java)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฆ ๋ฐฑ์—”๋“œ(Java Spring ๊ธฐ๋ฐ˜)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ง ๊ฐœ๋ฐœ๊ณตํ†ต / ์ธ์„ฑ๋ฉด์ ‘
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘  ์ž๋ฃŒ๊ตฌ์กฐ  (0) 2022.12.18
[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฆ ๋ฐฑ์—”๋“œ(Java Spring ๊ธฐ๋ฐ˜)  (3) 2022.10.31
[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ค ์šด์˜์ฒด์ œ  (1) 2022.10.31
[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฃ ๋„คํŠธ์›Œํฌ  (0) 2022.10.31
[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค  (2) 2022.10.31
    '๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘  ์ž๋ฃŒ๊ตฌ์กฐ
    • [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฆ ๋ฐฑ์—”๋“œ(Java Spring ๊ธฐ๋ฐ˜)
    • [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ค ์šด์˜์ฒด์ œ
    • [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฃ ๋„คํŠธ์›Œํฌ
    ๊ฐœ๋ฐœ์ž HOON
    ๊ฐœ๋ฐœ์ž HOON
    ์ข‹์€ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์„ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค. # ์ฃผ๋‹ˆ์–ด # ๋ฐฑ์—”๋“œ # ๊ฐœ๋ฐœ์ž

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”