JavaRush /Java Blog /Random-KO /ํŒจํ„ด๊ณผ ์‹ฑ๊ธ€ํ†ค - ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ

ํŒจํ„ด๊ณผ ์‹ฑ๊ธ€ํ†ค - ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ด ๊ธ€์€ ํŒจํ„ด์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ฒ˜์Œ ์ ‘ํ•˜์…จ๊ฑฐ๋‚˜, Singleton'e'์— ๋Œ€ํ•ด ๋“ค์–ด๋ณด์…จ๊ฑฐ๋‚˜, ๋งŒ๋“ค์–ด ๋ณด์…จ์ง€๋งŒ ์•„์ง ์•„๋ฌด๊ฒƒ๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜์‹  ๋ถ„๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ™˜์˜! JavaRush ํ•™์ƒ๋“ค์€ ๋ ˆ๋ฒจ 15์—์„œ ์ฒ˜์Œ์œผ๋กœ ํŒจํ„ด์„ ์ ‘ํ•˜๋Š”๋ฐ, ๊ฐ‘์ž๊ธฐ ์บก์ด Singleton๊ฒŒ์œผ๋ฅธ ๊ตฌํ˜„์œผ๋กœ ํŒจํ„ด์„ "์ˆ˜์ •"ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋“ฃ๋Š” ํ•™์ƒ๋“ค์€ SingletonํŒจํ„ด์ด ๋ฌด์—‡์ธ์ง€, ์™œ ํ•„์š”ํ•œ์ง€, ์–ด๋–ค ์ข…๋ฅ˜์˜ ํŒจํ„ด์ธ์ง€, Singleton๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๊ฒƒ์ด ์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ฒŒ์œผ๋ฅธ ๊ตฌํ˜„์ธ์ง€์— ๋Œ€ํ•ด ์ฆ‰์‹œ ๋งŽ์€ ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์„œ๋Œ€๋กœ ๋‹ต๋ณ€์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒจํ„ด๊ณผ ์‹ฑ๊ธ€ํ†ค - ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ - 1

์–ด์จŒ๋“  ํŒจํ„ด์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋” ๋‚˜์€ ์ดํ•ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ด ์งˆ๋ฌธ์— ์—ญ์‚ฌ๋ฅผ ํ†ตํ•ด ๋‹ตํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ค‘์—๋Š” ํฅ๋ฏธ๋กœ์šด ์•„์ด๋””์–ด๋ฅผ ์ƒ๊ฐํ•ด๋‚ธ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ๋“ฑ ์œ ๋ช…ํ•œ ๋„ค ๋ช…์˜ ์ž‘๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒจํ„ด๊ณผ ์‹ฑ๊ธ€ํ†ค - ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ - 2
๊ทธ๋“ค์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ๊ฑฐ์˜ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๊ตฌ์กฐ์ ์œผ๋กœ ๋™์ผํ•œ ์œ ํ˜•์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋“ค์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์„ ํŒจํ„ด ํ˜•ํƒœ๋กœ ์„ค๋ช…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฑ…์€ 1995๋…„์— "๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ๊ธฐ์ˆ " ์ด๋ผ๋Š” ์ œ๋ชฉ์œผ๋กœ ์ถœํŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ๋””์ž์ธ ํŒจํ„ด" . ์ฑ… ์ œ๋ชฉ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ๊ทธ๋ƒฅ 4์ธ๋ฐฉ์˜ ์„œ( The Book of the Gang of Four )๋กœ ์•Œ๋ ค์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ์ฒซ ๋ฒˆ์งธ ํŒ์—์„œ๋Š” 23๊ฐœ์˜ ํŒจํ„ด์ด ์ถœํŒ๋˜์—ˆ๊ณ , ์ดํ›„ ์ˆ˜์‹ญ ๊ฐœ์˜ ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋‹จ๋ฝ์˜ "ํŒจํ„ด์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?" ๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜์—ฌ ๋ช‡ ๋‹จ์–ด๋กœ ์š”์•ฝํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
ํŒจํ„ด์€ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ‘œ์ค€ํ™”๋œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Singleton์ด๊ฒƒ์€ ์ด๋Ÿฌํ•œ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

ํŒจํ„ด์ด ํ•„์š”ํ•œ ์ด์œ  (๋””์ž์ธ ํŒจํ„ด)

ํŒจํ„ด์„ ๋ชฐ๋ผ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, JavaRush์˜ 15๋ฒˆ์งธ ๋ ˆ๋ฒจ๊นŒ์ง€ ๊ทธ ์กด์žฌ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋ฏธ๋‹ˆ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ซ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒจํ„ด์ด ์ผ์ข…์˜ ๋„๊ตฌ์ด๋ฉฐ, ๊ทธ ์กด์žฌ๋กœ ์ธํ•ด ๋งˆ์Šคํ„ฐ์™€ ์•„๋งˆ์ถ”์–ด๊ฐ€ ๊ตฌ๋ณ„๋œ๋‹ค๋Š” ์ ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
ํŒจํ„ด๊ณผ ์‹ฑ๊ธ€ํ†ค - ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ - 3
ํŒจํ„ด์€ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ํŒจํ„ด์„ ์•Œ๋ฉด ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ธ”๋ž™์žญ๊ณผ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณ ์•ˆ ํ•˜๊ณ  ์ด์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ด๋ฏธ ์˜ค๋ž˜ ์ „์— ์„ค๋ช…ํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ„ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๋˜ํ•œ, ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋”์šฑ ํ‘œ์ค€ํ™”๋˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋Š” ์ด๋ฏธ ์ด ํŒจํ„ด์—์„œ ์˜ˆ์ธก๋˜๊ณ  ์ œ๊ฑฐ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ํŒจํ„ด์— ๋Œ€ํ•œ ์ง€์‹์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์„œ๋กœ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™๋ฃŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์›ํ•˜๋Š” ์ž‘์—…์„ ์„ค๋ช…ํ•˜๋Š” ๋Œ€์‹  ๋‹จ์ˆœํžˆ ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„์„ ๋งํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์š”์•ฝํ•˜๋ฉด ๋””์ž์ธ ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜์ง€ ๋ง๊ณ  ํ‘œ์ค€ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • ์ฝ”๋“œ ํ‘œ์ค€ํ™”;
  • ์šฉ์–ด ํ‘œ์ค€ํ™”;
์ด ์„น์…˜์˜ ๊ฒฐ๋ก ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ํŒจํ„ด ์ „์ฒด๋ฅผ ์„ธ ๊ฐ€์ง€ ํฐ ๊ทธ๋ฃน์œผ๋กœ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•ฉ๋‹ˆ๋‹ค.
ํŒจํ„ด๊ณผ ์‹ฑ๊ธ€ํ†ค - ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ - 4

๋งˆ์ง€๋ง‰์œผ๋กœ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด

Singleton์ƒ์„ฑ ํŒจํ„ด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค . ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฒˆ์—ญํ•˜๋ฉด ์™ธ๋กญ์Šต๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค์— ํ•˜๋‚˜์˜ ๊ฐœ์ฒด(ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜)๋งŒ ์žˆ๊ณ  ํ•ด๋‹น ๊ฐœ์ฒด์— ์ „์—ญ ์•ก์„ธ์Šค ์ง€์ ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์„ค๋ช…์„ ๋ณด๋ฉด ์ด ํŒจํ„ด์ด ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค.
  1. ํ”„๋กœ๊ทธ๋žจ์—์„œ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ ๊ฒŒ์ž„์—๋Š” "Character" ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ณ  ์ด ํด๋ž˜์Šค์—๋Š” ์บ๋ฆญํ„ฐ ์ž์ฒด๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐœ์ฒด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. ํด๋ž˜์Šค ๊ฐ์ฒด์— ์ „์—ญ ์•ก์„ธ์Šค ํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•  ๋•Œ. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋Š ๊ณณ์—์„œ๋‚˜ ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœ๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„์‰ฝ๊ฒŒ๋„ ๋‹จ์ˆœํžˆ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ๊ธˆ์ง€๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  ๋ˆ„๊ตฌ๋‚˜ ์ด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ „์—ญ ์•ก์„ธ์Šค ์ง€์ ์ด ์†์‹ค๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Singleton์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๊ฐ€ ์žˆ๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์†์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Singleton์ด์ „์— ์ƒ์„ฑ๋œ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์—†์Œ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
์ด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค Singleton. ํ”„๋กœ๊ทธ๋žจ์—๋Š” ๊ฐœ์ฒด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ „์—ญ ์•ก์„ธ์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ๋ฒจ 15์˜ ์˜ˆ์—์„œ ์บก์€ ๋‹ค์Œ ์ž‘์—…์— ๋Œ€ํ•ด ์ด ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค(์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค).
ํŒจํ„ด๊ณผ ์‹ฑ๊ธ€ํ†ค - ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ - 5
์กฐ๊ฑด์„ ์ฃผ์˜ ๊นŠ๊ฒŒ ์ฝ์œผ๋ฉด Singleton์—ฌ๊ธฐ์— ์ •ํ™•ํžˆ (Single)์ด ํ•„์š”ํ•œ ์ด์œ ๊ฐ€ ๋ถ„๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๊ฐœ์ฒด( Sun, Moon, ) ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค Earth. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ ํด๋ž˜์Šค๊ฐ€ ํƒœ์–‘/๋‹ฌ/์ง€๊ตฌ๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž์‹ ๋งŒ์˜ ์Šคํƒ€์›Œ์ฆˆ ๋ฒ„์ „์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ํ•œ ํ„ฐ๋ฌด๋‹ˆ์—†๋Š” ์ผ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ธ ๋‹จ๊ณ„์˜ Java ๊ตฌํ˜„Singleton ๊ธฐ๋Šฅ Java์˜ ์‹ฑ๊ธ€ํ†ค ๋™์ž‘์€ ์ƒ์„ฑ์ž๊ฐ€ ํ•ญ์ƒ ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Singleton'a์˜ ๋ชจ๋“  ๊ตฌํ˜„์€ ์ƒ์„ฑ์ž๋ฅผ ์ˆจ๊ธฐ๊ณ  ๋‹จ์ผ ๊ฐœ์ฒด์˜ ์กด์žฌ๋ฅผ ์ œ์–ดํ•˜๊ณ  ์ƒˆ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ "ํŒŒ๊ดด"ํ•˜๋Š” ๊ณต๊ฐœ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค. 'a๊ฐ€ ํ˜ธ์ถœ ๋˜๋ฉด Singleton์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜(์•„์ง ํ”„๋กœ๊ทธ๋žจ์— ์—†๋Š” ๊ฒฝ์šฐ) ์ด๋ฏธ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด: #1. โ€“ ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค์— ์ „์šฉ ์ •์  ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
public class LazyInitializedSingleton {
	private static LazyInitializedSingleton instance; //#1
}
#2. โ€“ ํด๋ž˜์Šค ์ƒ์„ฑ์ž(๊ธฐ๋ณธ ์ƒ์„ฑ์ž)๋ฅผ ๋น„๊ณต๊ฐœ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค(ํด๋ž˜์Šค ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ๋‹ซํžˆ๋ฉด ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์Œ).
public class LazyInitializedSingleton {
	private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){} // #2
}
#์‚ผ . โ€“ ์‹ฑ๊ธ€ํ†ค์„ ์–ป๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ •์  ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
public class LazyInitializedSingleton {
    private static LazyInitializedSingleton instance;
        private LazyInitializedSingleton(){}
        public static LazyInitializedSingleton getInstance(){ // #3
        if(instance == null){		//if the object has not been created yet
            instance = new LazyInitializedSingleton();	//create a new object
        }
        return instance;		// return the previously created object
    }
}
์œ„์˜ ์˜ˆ๋Š” ๋‹จ์ˆœํžˆ ์ƒ์„ฑ์ž๋ฅผ ์ˆจ๊ธฐ๊ณ  ํ‘œ์ค€ ์ƒ์„ฑ์ž ๋Œ€์‹  ์ž์ฒด ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์†Œ ์–ด์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ๋Š” JavaRush ํ•™์ƒ๋“ค์ด ์ฒ˜์Œ์œผ๋กœ ์ด ํŒจํ„ด(๋ฐ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด)์„ ์ ‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋” ๋ณต์žกํ•œ ์‹ฑ๊ธ€ํ†ค์˜ ๊ตฌํ˜„ ๊ธฐ๋Šฅ์€ ์—ฌ๊ธฐ์„œ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ์ด ํŒจํ„ด์„ ๋” ์„ธ๋ถ€์ ์œผ๋กœ ๊ฐœ์„ ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ๋งŒ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ(์Šค๋ ˆ๋“œ ํ•ญ๋ชฉ ์ฐธ์กฐ)์—์„œ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— Singleton์˜ getter ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์œ„์— ์„ค๋ช…๋œ ์ฝ”๋“œ๋Š” ์ž‘๋™์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ฐœ๋ณ„ ์Šค๋ ˆ๋“œ๊ฐ€ ํด๋ž˜์Šค์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์—. ๋”ฐ๋ผ์„œ ์˜ฌ๋ฐ”๋ฅธ Thread-safe ์‹ฑ๊ธ€ํ†ค์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ๋Š” ์—ฌ์ „ํžˆ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค =) ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ. ์บก์ด ์š”๊ตฌํ•œ ์ง€์—ฐ์ดˆ๊ธฐํ™”๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ ?์ง€์—ฐ์ดˆ๊ธฐํ™”๋Š” ์ง€์—ฐ์ดˆ๊ธฐํ™”๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ ์ž‘์—…(๊ฐ์ฒด ์ƒ์„ฑ์€ ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ ์ž‘์—…)์„ ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์š”์ฒญ ์‹œ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ”๋“œ Singleton'a'์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ์ฒด๋Š” ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•ก์„ธ์Šค๋˜๋Š” ์ˆœ๊ฐ„ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ง€์—ฐ ์ดˆ๊ธฐํ™” ๊ฐœ๋…์ด ์–ด๋–ป๊ฒŒ๋“  'om'๊ณผ ์—„๊ฒฉํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค Singleton. ์ง€์—ฐ ์ดˆ๊ธฐํ™”๋Š” ํ”„๋ก์‹œ ๋ฐ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ƒ์„ฑ์  ๋””์ž์ธ ํŒจํ„ด์—๋„ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ด๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. =) ๊ธฐ์‚ฌ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ฐ ๋‹ค์Œ ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  1. ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ Java ์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด ๋ชจ๋ฒ” ์‚ฌ๋ก€
  2. ๋””์ž์ธ ํŒจํ„ด
  3. Java์˜ ์˜ฌ๋ฐ”๋ฅธ ์‹ฑ๊ธ€ํ†ค
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION