1. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํด๋ž˜์Šค
  2. ์ถ”์ƒํ™”
  3. ๋‹คํ˜•์„ฑ
  4. ์˜์กด์„ฑ ์ฃผ์ž…
  5. ๋””์ž์ธํŒจํ„ด - ์‹ฑ๊ธ€ํ†ค

1. ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํด๋ž˜์Šค

์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํด๋ž˜์Šค์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๊ณตํ†ต์ 

  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ(๊ตฌํ˜„๋ถ€ ์—†์ด ์„ ์–ธ๋ถ€๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์„œ๋“œ)๋กœ ์ด๋ฃจ์–ด์ง
  • ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ
  • ์—ฌ๋Ÿฌ ๊ณณ์— ์‚ฌ์šฉ๋  ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ๊ฐ•์ œํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ

์ถ”์ƒํด๋ž˜์Šค = extends ์ž์‹ ์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ•˜์œ„๋กœ ํ™•์žฅ ์ธํ„ฐํŽ˜์ด์Šค = implements ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ ํด๋ž˜์Šค์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ๋™์ผํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„

์ถ”์ƒ ํด๋ž˜์Šค(Abstract Class)

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค
  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์ƒ์†์„ ํ†ตํ•ด ํ•˜์œ„ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œ
  • ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค
  • ์ƒ์† ํ‚ค์›Œ๋“œ๋กœ extends ์‚ฌ์šฉ
  • ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ฉ”์†Œ๋“œ์˜ ๊ตฌํ˜„์„ ๊ฐ•์ œํ•ด์•ผ ํ•จ(Override)
  • ๋‹ค์ค‘ ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•จ

์ธํ„ฐํŽ˜์ด์Šค(Interface)

  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ์™€ ์ƒ์ˆ˜๋กœ๋งŒ ์ด๋ฃจ์–ด์ง
  • ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋˜์–ด์žˆ๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ Implementsํ•˜๋Š” ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œ
  • ๋‹ค์ค‘ ์ƒ์† ๊ฐ€๋Šฅ : ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ผ ์ƒ์† ๋ฐ›๋Š” ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘ ์ƒ์†์˜ ๋ชจํ˜ธ์„ฑ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

NOTE

์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํด๋ž˜์Šค์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

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

NOTE

์™œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‚˜์š”?

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

NOTE

์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ ํด๋ž˜์Šค ์ค‘ ์–ด๋А ๊ฒƒ์„ ์„ ํƒํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

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

NOTE

์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

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

2. ์ถ”์ƒํ™”

์ถ”์ƒํ™”๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ถ”์ƒํ™”

  • ๊ฐ์ฒด์˜ ๊ณตํ†ต์ ์ธ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ์ถ”์ถœํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๊ฒƒ
  • ํ•˜์œ„ ํด๋ž˜์Šค๋“ค์˜ ๊ณตํ†ต์„ฑ์„ ๋ชจ์•„ ์ƒ์œ„ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

ex) ์ž๋™์ฐจ์™€ ์˜คํ† ๋ฐ”์ด๋Š” ์ „์ง„๊ณผ ํ›„์ง„์„ ํ•  ์ˆ˜ ์žˆ์Œ โ†’ ์ž๋™์ฐจ์™€ ์˜คํ† ๋ฐ”์ด๋ผ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค๋“ค์˜ ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ(์ „์ง„๊ณผ ํ›„์ง„)์„ ์ถ”์ถœํ•˜์—ฌ ์ด๋™์ˆ˜๋‹จ์ด๋ผ๋Š” ์ƒ์œ„ํด๋ž˜์Šค์— ์ •์˜

NOTE

์ถ”์ƒํ™”๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ถ”์ƒํ™”๋Š” ๊ฐ์ฒด์˜ ๊ณตํ†ต์ ์ธ ํŠน์„ฑ์„ ์ถ”์ถœํ•˜์—ฌ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋™์ฐจ์™€ ์˜คํ† ๋ฐ”์ด ํด๋ž˜์Šค์— ๊ฐ๊ฐ ์ „์ง„๊ณผ ํ›„์ง„ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ์ด ๊ธฐ๋Šฅ์„ โ€˜์ด๋™์ˆ˜๋‹จโ€™์ด๋ผ๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์— ์ •์˜ํ•˜์—ฌ ์ถ”์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NOTE

์ถ”์ƒํ™”๋ฅผ ์ง€๋‚˜์น˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ๋‹จ์ ์ด ์žˆ์„๊นŒ์š”?

์„ค๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

3. ๋‹คํ˜•์„ฑ

๋‹คํ˜•์„ฑ์„ ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ–ˆ๋Š”์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋‹คํ˜•์„ฑ

  • ์–ด๋–ค ๊ฐ์ฒด์˜ ์†์„ฑ์ด๋‚˜ ๊ธฐ๋Šฅ์ด ๋งฅ๋ฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํŠน์„ฑ
  • ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ
  • ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

๊ณตํ†ต ๋ชจ๋“ˆ์— Base Exception์„ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฐ ์„œ๋น„์Šค ๋ชจ๋“ˆ์—์„œ Exception์„ ํ™•์žฅํ•˜์—ฌ ํ•˜์œ„ ์˜ˆ์™ธ ํด๋ž˜์Šค๋“ค์ด ๋‹ค๋ฅธ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐœ๋ฐœํ•จ

NOTE

๋‹คํ˜•์„ฑ์„ ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ–ˆ๋Š”์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๊ณตํ†ต ๋ชจ๋“ˆ์— Base Exception์„ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฐ ์„œ๋น„์Šค ๋ชจ๋“ˆ์—์„œ Exception์„ ํ™•์žฅํ•˜์—ฌ ํ•˜์œ„ ์˜ˆ์™ธ ํด๋ž˜์Šค๋“ค์ด ๋‹ค๋ฅธ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐœ๋ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค.

NOTE

๋‹คํ˜•์„ฑ์„ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋‹คํ˜•์„ฑ์„ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•œ ๋™์ž‘์„ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ณณ์— ๋ฐ˜๋ณต๋˜์–ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๋Š˜์–ด๋‚˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

4. ์˜์กด์„ฑ ์ฃผ์ž…

์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์ ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์˜์กด์„ฑ ์ฃผ์ž…

  • ๊ฐ์ฒด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์˜์กด ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹
  • ์ƒ์„ฑ์ž ์ฃผ์ž…, ์„ธํ„ฐ ์ฃผ์ž… ,์ธํ„ฐํŽ˜์ด์Šค ์ฃผ์ž…
    • ์ƒ์„ฑ์ž ์ฃผ์ž… : ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ์ ์— ์˜์กด์„ฑ ์ฃผ์ž…
    • ์„ธํ„ฐ ์ฃผ์ž… : ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ์„ธํ„ฐ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…
    • ์ธํ„ฐํŽ˜์ด์Šค ์ฃผ์ž… : ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

์žฅ์ 

  • ํด๋ž˜์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถค
  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€
  • ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ
  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ์ฆ๊ฐ€

NOTE

์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ์ ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

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

NOTE

์ƒ์„ฑ์ž ์ฃผ์ž…๊ณผ ์„ธํ„ฐ ์ฃผ์ž…์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ๋„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

5. ๋””์ž์ธ ํŒจํ„ด - ์‹ฑ๊ธ€ํ†ค

๋””์ž์ธ ํŒจํ„ด ์ค‘ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์„ค๋ช…ํ•˜๊ณ , ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์„ ์ด์•ผ๊ธฐํ•ด์ฃผ์„ธ์š”

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด (Singleton Pattern)

  • ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜๋งŒ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด
  • ์ƒ์„ฑ์ž๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅํ•˜์—ฌ ๋™์ผ ํ•œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•˜๋„๋ก ํ•จ
  • ๊ฐ์ฒด๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋‹จ ํ•œ๋ฒˆ๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์ „์—ญ์—์„œ ์ด๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  • private ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ ธ์•ผ ํ•จ

์žฅ์ 

  • ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค
  • ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ
  • ์ง€์—ฐ ์ดˆ๊ธฐํ™”

๋‹จ์ 

  • ๊ฒฐํ•ฉ๋„ ์ฆ๊ฐ€
  • ํ…Œ์ŠคํŠธ ๋ณต์žก์„ฑ
  • ์ƒํƒœ๊ด€๋ฆฌ ์–ด๋ ค์›€
  • ์ „์—ญ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ : ๋ฌด๋ถ„๋ณ„ํ•œ ์‚ฌ์šฉ์„ ๋ง‰๊ธฐ ํž˜๋“ฆ

NOTE

๋””์ž์ธ ํŒจํ„ด ์ค‘ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์„ค๋ช…ํ•˜๊ณ , ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์„ ์ด์•ผ๊ธฐํ•ด์ฃผ์„ธ์š”

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


NOTE

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๊ตฌํ˜„ํ•  ๋•Œ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ, ๊ตฌํ˜„ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์žฌ์ •์˜(Override)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์œผ๋กœ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NOTE

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜์„ธ์š”.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์‹œ์— ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด ๊ฒฝ์Ÿ(Race Condition)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— getInstance ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    1. Synchronized ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ: getInstance ๋ฉ”์„œ๋“œ์— ๋™๊ธฐํ™”๋ฅผ ์ ์šฉํ•˜์—ฌ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™๊ธฐํ™”๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    2. ์ด์ค‘ ๊ฒ€์‚ฌ ๋ฝ(Double-Checked Locking): ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งŒ ๋™๊ธฐํ™”ํ•˜๋„๋ก ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    3. ์ด๋ฅธ ์ดˆ๊ธฐํ™”(Eager Initialization): ํด๋ž˜์Šค ๋กœ๋“œ ์‹œ์ ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ ๋™์‹œ ์ ‘๊ทผ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    4. Enum ์‹ฑ๊ธ€ํ†ค: Enum์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ๊ณผ ์ง๋ ฌํ™” ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฏ€๋กœ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.