Design pattern๐Ÿ“

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

eundeang 2023. 7. 10. 16:49

 

์‹ฑ๊ธ€ํ†คํŒจํ„ด์ด๋ž€? 
๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค์ง 'ํ•˜๋‚˜'์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

 

์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœ๋˜๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ,

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

(swift์—์„œ๋Š” ์ƒ์„ฑ์ž๋ฅผ private๋กœ ์„ ์–ธํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์˜ ์ถ”๊ฐ€์  ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ง‰๋Š”๋‹ค.)

static let์œผ๋กœ ์ž์‹ ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ „์—ญ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ๋‹ค. - ๋ฐ์ดํ„ฐ ๊ณต์œ 

๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•˜๋Š” ์ˆœ๊ฐ„ lazyํ•˜๊ฒŒ ๋™์ž‘ํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ(๋ฐ์ดํ„ฐ ์˜์—ญ)์— ์˜ฌ๋ผ๊ฐ„๋‹ค. 

 

์‚ฌ์šฉ ์ƒํ™ฉ

  • ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์กด์žฌํ•ด์•ผ ํ• ๋•Œ
  • ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

์žฅ์ 

๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ 

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ• ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›์•„์•ผํ•˜์ง€๋งŒ, ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์ด์šฉํ•œ๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ๋งŒ๋“ค์–ด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๊ณต์œ 

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

์†๋„ 

  • ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ๋•Œ๋Š”, ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฏ€๋กœ ์†๋„ ์ธก๋ฉด์—์„œ ์ด์ ์ด ์žˆ๋‹ค

๋‹จ์ 

๊ฐœ๋ฐฉ-ํ์‡  ์›์น™ ์œ„๋ฐฐ

  • ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๊ฑฐ๋‚˜, ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ์‹œํ‚ฌ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ instance๋“ค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ "๊ฐœ๋ฐฉ - ํ์‡„"์›์น™์„ ์œ„๋ฐฐ ( ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ ์–ด๊ธ‹๋‚จ)

์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€

 

Swift Singleton์˜ ํŠน์ง•

static์„ ์‚ฌ์šฉํ•ด ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์ ‘๊ทผํ•˜๋Š” ์ˆœ๊ฐ„ lazy (์ดˆ๊ธฐํ™”) ๋œ๋‹ค. 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Singleton Instance๊ฐ€ ์ตœ์ดˆ ์ƒ์„ฑ๋˜๊ธฐ ์ „๊นŒ์ง„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์—, ๋™๊ธฐํ™” ์ž‘์—…์ด ์ž๋™ ์ ์šฉ๋œ๋‹ค. 

๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ๋‹ฌ๋ฆฌ Tread- Safe ํ•˜๋‹ค.