GoF์˜ ๋””์ž์ธ ํŒจํ„ด, ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

ํ•ด๋‹น ๊ธ€์€, ๋‹ค์Œ์˜ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์•ฝ

  • ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์žˆ๋Š๋‚˜, ์ƒ์„ฑ์€ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํŒจํ„ด
  • ์˜ค์ง ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋งŒ ์ œ๊ณตํ•˜๊ณ , ์ „์—ญ์ ์ธ ์ ‘๊ทผ์ ์„ ์ œ๊ณตํ•จ
  • swift์—์„œ๋Š” static let์œผ๋กœ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๊ฒฝ์šฐ instance์˜ ๊ฐœ์ˆ˜๋ฅผ 1๊ฐœ๋กœ ๋ณด์žฅํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์š”๊ตฌ๋จ

์˜ˆ์‹œ

  • ํŠน๋ณ„ํ•œ ๊ฒƒ์€ ์—†๋‹ค.
internal class King {
 
    internal static let shared: King = King()
 
    private init() { }
 
    internal func say() {
        print("์™•์€ ํ•˜๋‚˜๋ฟ์ด์•ผ..!")
    }
    
}

ํ™œ์šฉ์„ฑ

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

์ฐธ์—ฌ์ž

  • Singleton(King)

ํ˜‘๋ ฅ ๋ฐฉ๋ฒ•

  • ์‚ฌ์šฉ์ž๋Š” Singleton class์— ์ •์˜๋œ instance() ์—ฐ์‚ฐ์œผ๋กœ ์œ ์ผํ•˜๊ฒŒ ์ƒ์„ฑ๋˜๋Š” ๋‹จ์ผ์ฒด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•œ๋‹ค.
  • swift์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ shared๋กœ ์ •์˜ํ•œ ์ •์  ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•œ๋‹ค.

๊ฒฐ๊ณผ

  1. ์œ ์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋กœ์˜ ์ ‘๊ทผ์„ ํ†ต์ œ
  2. ์ „์—ญ ๋ณ€์ˆ˜ ๋Œ€๋น„ namespace๋ฅผ ์ขํžˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹๋‹ค.
  3. ์—ฐ์‚ฐ ๋ฐ ํ‘œํ˜„์˜ ๋ณ€๊ฒฝ์„ ํ—ˆ์šฉํ•œ๋‹ค. ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋Œ€๋ฌธ์ด๋‹ค.
  4. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ž์œ ๋กญ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ instance()์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์œผ๋กœ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์žฅ๋ฐ›๋Š”๋‹ค.
    • ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๊ณ  ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋กœ ์ ‘๊ทผํ•˜๋„๋ก ๊ตฌํ˜„๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  5. ํด๋ž˜์Šค ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์œ ์—ฐํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ๋‹จ์ ์ธ ์˜ˆ๋กœ swift์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํด๋ž˜์Šค ์ •์  ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ์ด๋Ÿด ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๋‹ค.

๊ด€๋ จ ํŒจํ„ด๊ณผ ์ฐจ์ด์ 

  • ๋งŽ์€ ํŒจํ„ด์ด ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•จ
  • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ, ๋นŒ๋”, ์›ํ˜• ํŒจํ„ด ๋“ฑ๋“ฑ

Reference