Java

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

์ž๋ฐ”๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์š”์†Œ๋“ค์ด ๊ฐ์ฒด๋กœ ํ‘œํ˜„๋˜๊ณ , ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋…์˜ ํŠน์ง•์ธ ์ถ”์ƒํ™”, ์บก์Аํ™”, ์ƒ์†์„ฑ, ๋‹คํ˜•์„ฑ์ด ์ ์šฉ๋œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

 

์ž๋ฐ”์˜ ์žฅ์ ์œผ๋กœ๋Š”,

  • JVM(์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ) ์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ์— ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.
  • GarbageCollector๋ฅผ ํ†ตํ•œ ์ž๋™์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์˜ ๋‹จ์ ์œผ๋กœ๋Š”,

  • JVM(์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ) ์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฝ๋‹ˆ๋‹ค.
  • ๋‹ค์ค‘ ์ƒ์†์ด๋‚˜ ํƒ€์ž…์— ์—„๊ฒฉํ•˜๋ฉฐ, ์ œ์•ฝ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ก ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ํฌ๊ฒŒ Method ์˜์—ญ, Stack ์˜์—ญ, Heap ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„๋˜๊ณ , ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

Method ์˜์—ญ

  • ์ „์—ญ ๋ณ€์ˆ˜์™€ static ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋ฉฐ, Method ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๋‹ค.

Stack ์˜์—ญ

  • ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ์ดํ„ฐ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด๋ฉฐ, ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ  ์ข…๋ฃŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค.
  • LIFO(Last In First Out) ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ์ด์ „ ๋ฐ์ดํ„ฐ๋Š” ์ง€์›Œ์ง„๋‹ค.

Heap ์˜์—ญ

  • new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค), ๋ฐฐ์—ด ๋“ฑ์ด Heap ์˜์—ญ์— ์ €์žฅ๋˜๋ฉฐ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ๋œ๋‹ค.

 

๐Ÿ’ก ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OPP)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์šฐ๋ฆฌ๊ฐ€ ์‹ค์ƒํ™œ์—์„œ ์“ฐ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ์ฒด๋ผ๊ณ  ํ•˜๋Š”๋ฐ,

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

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•์ธ ์ถ”์ƒํ™”, ์บก์Аํ™”, ์ƒ์†์„ฑ, ๋‹คํ˜•์„ฑ์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ  ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ ์‹ ๋ขฐ์„ฑ ๋†’์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“ ์ถ”์ƒํ™”, ์บก์Аํ™”, ์ƒ์†์„ฑ, ๋‹คํ˜•์„ฑ

  • ์ถ”์ƒํ™” : ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด๋“ค์˜ ๊ณตํ†ต๋œ ์†์„ฑ์ด๋‚˜ ๊ธฐ๋Šฅ๋“ค์„ ์ถ”์ƒํ™”ํ•ด์„œ ์ •์˜ํ•˜๋Š” ๊ฒƒ
  • ์บก์Аํ™” : ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ๊ตฌํ˜„ ๋‚ด์šฉ์„ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ฐ์ถ”๋Š” ๊ฒƒ
    • ํด๋ž˜์Šค๋กœ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ๋‚ด๋ถ€์— ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๋‘์–ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๊ฐ์ถ”๋Š” ๊ฒƒ์„ ์˜ˆ์‹œ๋กœ ๋“ค ์ˆ˜ ์žˆ์Œ
  • ์ƒ์†์„ฑ : ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ
  • ๋‹คํ˜•์„ฑ : ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŠน์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
    • ์˜ค๋ฒ„๋กœ๋”ฉ, ์˜ค๋ฒ„๋ผ์ด๋”ฉ

 

๐Ÿ“ ๊ฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด ?

ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ์„ค๊ณ„๋„์ž…๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์˜ค๋ฒ„๋กœ๋”ฉ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž…์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜์—ฌ, ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ) print()

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์ƒ์œ„ ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ) toString()

 

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

์—… ์บ์ŠคํŒ…๊ณผ ๋‹ค์šด ์บ์ŠคํŒ…์€ ์„œ๋กœ ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค์—์„œ ๋‚˜ํƒ€๋‚˜๋ฉฐ,
์—… ์บ์ŠคํŒ…์€ ์ž์† ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜์—์„œ ์กฐ์ƒ ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ ํ˜• ๋ณ€ํ™˜
๋‹ค์šด ์บ์ŠคํŒ…์€ ์กฐ์ƒ ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜์—์„œ ์ž์† ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ ํ˜• ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

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

String์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ, heap๊ณผ ์ƒ์ˆ˜ํ’€์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

StringBuilder์™€ StringBuffer๋Š” heap์— ์ €์žฅ๋˜๊ณ  ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,

StringBuffer์˜ ๊ฒฝ์šฐ Thread-safe ํ•˜๊ณ  StringBuffer์˜ ๊ฒฝ์šฐ Thread-safe ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

Thread-safe : ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

๐Ÿ’ก ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์„ค๊ณ„์›์น™์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™) : ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
  • OCP(๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™) : ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • LSP(๋ฆฌ์Šค ์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™) : ํ•˜์œ„ ํƒ€์ž…์€ ํ•ญ์ƒ ์ƒ์œ„ ํƒ€์ž…์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ISP(์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™) : ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ•์กฐํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‚ซ๋‹ค.
  • DIP(์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ์›์น™) : ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒ ํด๋ž˜์Šค์™€ ๊ฐ™์ด ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ํด๋ž˜์Šค์™€ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์•ผ ํ•œ๋‹ค.

 

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

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ๋‚ด ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋˜๊ฑฐ๋‚˜ abstract๋กœ ์ •์˜๋œ ๊ฒฝ์šฐ๋ฅผ ๋งํ•˜๊ณ ,

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. (์ž๋ฐ” 8๋ถ€ํ„ฐ static, default ๋ฉ”์„œ๋“œ ํฌํ•จ ๊ฐ€๋Šฅ)

 

์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ณตํ†ต์ ์œผ๋กœ๋Š”,

  • new ์—ฐ์‚ฐ์ž๋กœ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ถˆ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ํ™•์žฅ/๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฐจ์ด์ ์œผ๋กœ๋Š”,

  • ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋“ค์˜ ๊ณตํ†ต์ ์ธ ๋กœ์ง์„ ์ถ”์ƒํ™”์‹œํ‚ค๊ณ , ๊ธฐ๋Šฅ ํ™•์žฅ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. (extends)
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํŠน์ •ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค. (implements)
  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

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

๋ฆฌํ”Œ๋ ‰์…˜(Reflection)์ด๋ž€ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํƒ€์ž…์„ ์•Œ์ง€ ๋ชปํ•ด๋„, ๊ทธ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ, ํƒ€์ž…, ๋ณ€์ˆ˜๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ž๋ฐ” API์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“ ๋ฆฌํ”Œ๋ ‰์…˜์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ

IntelliJ์˜ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ, ์Šคํ”„๋ง์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ’ก ๊ฐ€๋ณ€ ๊ฐ์ฒด์™€ ๋ถˆ๋ณ€ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๊ฐ€๋ณ€ ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„์—๋„ ๊ทธ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•˜๊ณ ,

๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„์—๋„ ๊ทธ ์ƒํƒœ๋ฅผ ์ ˆ๋Œ€๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ€๋ณ€ ๊ฐ์ฒด์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ๋Š” ArrayList, HashMap, StringBuilder, StringBuffer ๋“ฑ์ด ์กด์žฌํ•˜๊ณ ,

๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ๋Š” String, Wrapper ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž๋ฐ”์—์„œ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ํ•„๋“œ๊ฐ€ ์›์‹œ ํƒ€์ž…์ธ ๊ฒฝ์šฐ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๐Ÿ“ Wrapper Class์™€ Boxing๊ณผ UnBoxing ?

  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(Primitive data type)์— ๋Œ€ํ•œ ๊ฐ์ฒด ํ‘œํ˜„์„ Wrapper Class๋ผ๊ณ  ํ•œ๋‹ค.
  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• โžก Wrapper Class๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ Boxing์ด๋ผ ํ•˜๋ฉฐ,
  • Wrapper Class โžก ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ UnBoxing์ด๋ผ ํ•œ๋‹ค.

 

๐Ÿ’ก ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ,

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

 

๐Ÿ“ JVM

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

์Šคํƒ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, Java Byte Code๋ฅผ OS์— ๋งž๊ฒŒ ํ•ด์„ํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ’ก ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๊ณผ์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

GC์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ , GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์„ ์ค‘๋‹จ ํ›„(Stop The World ๊ณผ์ •) ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œ๊ฑฐ(Mark and Sweep ๊ณผ์ •) ํ•˜๊ณ  ์ž‘์—…์ด ์žฌ๊ฐœ๋ฉ๋‹ˆ๋‹ค.

GC ์ž‘์—…์€ Young ์˜์—ญ์— ๋Œ€ํ•œ Minor GC์™€ Old ์˜์—ญ์— ๋Œ€ํ•œ Major GC๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก try-with-resources์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

try-with-resources๋Š” try-catch-finally์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

try() ์•ˆ์— ์ž์› ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋ฉด, try ๋ธ”๋ก์ด ๋๋‚˜๊ณ  ์ž๋™์œผ๋กœ ์ž์› ํ•ด์ œํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋กœ finally ๊ตฌ๋ฌธ์ด๋‚˜ ๋ชจ๋“  catch ๊ตฌ๋ฌธ์— ์ข…๋ฃŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ก C++๊ณผ ์ž๋ฐ”์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

c++๊ณผ ์ž๋ฐ”, ๋‘ ์–ธ์–ด ๋ชจ๋‘ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋‘ ์–ธ์–ด ๋ชจ๋‘ ์ •์ˆ˜ํ˜•, ์‹ค์ˆ˜ํ˜•, ๋ฌธ์žํ˜•๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์ œ์–ด ๊ตฌ์กฐ(์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ๋“ฑ)๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ฉฐ, try-catch-finally ๋ธ”๋ก์„ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๋‘ ์–ธ์–ด์˜ ์ฐจ์ด์ ์œผ๋กœ๋Š”,

์ž๋ฐ”

  • ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ 
  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•œ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ œ๊ณต
  • ํด๋ž˜์Šค ๊ฐ„์˜ ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ

C++

  • ํ”Œ๋žซํผ์— ์ข…์†์ 
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
  • ํด๋ž˜์Šค ๊ฐ„์˜ ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›

 

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

new String()์€ new ํ‚ค์›Œ๋“œ๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ €์žฅ๋˜๊ณ ,

new String()๋กœ ์ƒ์„ฑ๋œ ๋‘ ๊ฐ์ฒด๋Š” ๋‚ด์šฉ์ด ๊ฐ™๋”๋ผ๋„ ์ฃผ์†Ÿ๊ฐ’์ด ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

""๋Š” Heap ์•ˆ์— ์žˆ๋Š” ์ƒ์ˆ˜ ํ’€(String Pool) ์˜์—ญ์— ์ €์žฅ๋˜๊ณ ,

๋™์ผํ•œ ๋ฆฌํ„ฐ๋Ÿด์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ๋˜๋”๋ผ๋„ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“ Java์—์„œ, ==์™€ equals์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€ ?

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

'equals' ์—ฐ์‚ฐ์€ ๋‘ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ฐ’์ด ๊ฐ™์€์ง€ ๋‚ด์šฉ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

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

 

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

์ œ๋„ค๋ฆญ ํƒ€์ž…์€ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ์ฒด๋“ค์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํƒ€์ž… ๋งค๊ฐœ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์„œ๋“œ์— ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ํƒ€์ž… ์ฒดํฌ์™€ ํ˜• ๋ณ€ํ™˜์˜ ์ƒ๋žต์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ 

์ž˜๋ชป๋œ ํƒ€์ž… ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ’ก  ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ œ์–ด ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ •์˜ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

ex) ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณตํ†ต์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ , ์ด๋ฏธ ๊ตฌํ˜„๋œ ์ฝ”๋“œ(ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋‹จ์ง€ ๊ธฐ๋Šฅ๋งŒ์„ ์ œ๊ณตํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ ํ๋ฆ„์ด๋‚˜ ๊ตฌ์กฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ex) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (JDBC, Hibernate, JPA)

 

๐Ÿ’ก ์ƒ์†๊ณผ ๊ตฌํ˜„์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์ƒ์†์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ , ์ด๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์€ ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜์—ฌ, ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์„ ์–ธํ•œ ๋™์ž‘์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก  final์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

final ํ‚ค์›Œ๋“œ๋Š” ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

๐Ÿ“ final ํ‚ค์›Œ๋“œ๋ฅผ ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜, ์ฐธ์กฐ ๋ณ€์ˆ˜์— ๊ฐ๊ฐ ๋ถ™์ธ๋‹ค๋ฉด ?

  • ํด๋ž˜์Šค์— ์ ์šฉ ์‹œ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ฉ”์„œ๋“œ์— ์ ์šฉ ์‹œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ์ˆ˜ ์—†๋‹ค. (์˜ค๋ฒ„๋กœ๋”ฉ์€ ๊ฐ€๋Šฅํ•จ)
  • ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜์— ์ ์šฉ ์‹œ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ฐธ์กฐ ๋ณ€์ˆ˜์— ์ ์šฉ ์‹œ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ํž™ ๋‚ด์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

 

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

checkedException์€ ์‹คํ–‰ํ•˜๊ธฐ ์ „(์ปดํŒŒ์ผ ์‹œ์ ) ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ๋ฅผ ๋งํ•˜๊ณ , ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ex) Exception - IOException, ClassNotFoundException ๋“ฑ

 

UncheckedException์€ ์‹คํ–‰ํ•˜๊ณ  ๋‚œ ํ›„์— ์•Œ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ๋งํ•˜๊ณ , ๋”ฐ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

ex) Exception - NullPointerException, ArrayIndexOutOfBoundException ๋“ฑ

 

RuntimeException์€ UncheckedException์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค์ด๊ณ ,

RuntimeException์ด ์•„๋‹Œ ๊ฒƒ์€ checkedException์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

 

 

 

'Computer Science' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Spring & Spring Boot  (0) 2024.08.15