๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Computer Science/Design Pattern

[๋””์ž์ธ ํŒจํ„ด] ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด (Singleton Pattern)

by hyebin (Helia) 2023. 3. 16.
๋ฐ˜์‘ํ˜•

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

  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์˜ค์ง ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค ๋งŒ ๊ฐ€์ง€๋Š” ํŒจํ„ด
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ชจ๋“ˆ์— ๋งŽ์ด ์‚ฌ์šฉ
  • ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋†“๊ณ  ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค์ด ๊ณต์œ ํ•˜๋ฉฐ ์‚ฌ์šฉ
  • ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋น„์šฉ์ด ์ค„์–ด๋“ฆ
  • ๋™์‹œ์„ฑ(Concurrency) ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•จ

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์ตœ์ดˆ ํ•œ ๋ฒˆ๋งŒ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ณ ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋ฐฉ์ง€
  • ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ํ™œ์šฉํ•ด ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ์‹ฑ๊ธ€ํ†ต ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ํด๋ž˜์Šค ๊ฐ„์— ๋ฐ์ดํ„ฐ ๊ณต์œ ๊ฐ€ ์‰ฌ์›€
  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์ ˆ๋Œ€์ ์œผ๋กœ ํ•œ ๊ฐœ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋ณด์ฆํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์˜ ๋‹จ์ 

  • ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๊ฐ€ ํ˜ผ์ž ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๊ฑฐ๋‚˜, ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ์‹œํ‚ฌ ๊ฒฝ์šฐ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™์ด ์œ„๋ฐฐ
    • ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ (SOLID)
    • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsiblity Principle): ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, ํด๋ž˜์Šค๋Š” ๊ทธ ์ฑ…์ž„์„ ์™„์ „ํžˆ ์บก์Аํ™”ํ•ด์•ผ ํ•จ
    • ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open Closed Principle): ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ(Closed), ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก(Open) ์„ค๊ณ„๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™
    • ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov Substitution Principle): ์ž์‹ ํด๋ž˜์Šค๋Š” ์–ธ์ œ๋‚˜ ์ž์‹ ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์›์น™
    • ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface Segregation Principle): ํ•œ ํด๋ž˜์Šค๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•จ, ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‚˜์Œ
    •  ์˜์กด ์—ญ์ „ ์›์น™ (Dependency Inversion Principle): ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ๋ณ€ํ™”ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ ๋˜๋Š” ์ž์ฃผ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ, ๊ฑฐ์˜ ๋ณ€ํ™”๊ฐ€ ์—†๋Š” ๊ฒƒ์— ์˜์กดํ•˜๋ผ๋Š” ๊ฒƒ
  • ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ์–ด๊ธ‹๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ์–ด๋ ค์›Œ์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€
  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ 2๊ฐœ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ œ๋„ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ์ž์›์„ ์„œ๋กœ ๊ณต์œ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…๋ฆฝ์ ์ด์ง€ ์•Š์•„ TDD(Test Driven Development)๋ฅผ ํ•  ๋•Œ ์–ด๋ ค์›€
  • ์ž์‹ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ์ ๊ณผ, ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์  ๋“ฑ
  • ๋”ฐ๋ผ์„œ, ๋ฐ˜๋“œ์‹œ ์‹ฑ๊ธ€ํ†ค์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ฉด ์ง€์–‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

 

์˜์กด์„ฑ ์ฃผ์ž…(DI, Dependency Injection)

  • ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ์„ ๋А์Šจํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์˜์กด์„ฑ(์ข…์†์„ฑ): A๊ฐ€ B์— ์˜์กด์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ B์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด A ๋˜ํ•œ ๋ณ€ํ•ด์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ๋ฉ”์ธ ๋ชจ๋“ˆ(main module)์ด ์ง์ ‘ ๋‹ค๋ฅธ ํ•˜์œ„ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์ฃผ๊ธฐ๋ณด๋‹ค๋Š” ์ค‘๊ฐ„์— ์˜์กด์„ฑ ์ฃผ์ž…์ž(dependency injector)๊ฐ€ ๋Œ€์‹  ์˜์กด์„ฑ ์ฃผ์ž…
  • ๋ฉ”์ธ๋ชจ๋“ˆ์ด ๊ฐ„์ ‘์ ์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…
  • ๋ฉ”์ธ๋ชจ๋“ˆ(์ƒ์œ„ ๋ชจ๋“ˆ)์€ ํ•˜์œ„ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์˜์กด์„ฑ ๊ฐ์†Œ 

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

  • ๋ชจ๋“ˆ์„ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด ํ…Œ์ŠคํŒ…ํ•˜๊ธฐ ์‰ฝ๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(migration) ํ•˜๊ธฐ ์ˆ˜์›”
  • ๊ตฌํ˜„ํ•  ๋•Œ ์ถ”์ƒํ™” ๋ ˆ์ด์–ด๋ฅผ ๋„ฃ๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„์ฒด๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜์กด์„ฑ ๋ฐฉํ–ฅ์ด ์ผ๊ด€๋˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ด€๊ณ„๋“ค์ด ๋ช…ํ™•ํ•ด์ง

์˜์กด์„ฑ ์ฃผ์ž…์˜ ๋‹จ์ 

  • ๋ชจ๋“ˆ๋“ค์ด ๋”์šฑ ๋ถ„๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•ด ๋ณต์žก์„ฑ ์ฆ๊ฐ€
  • ๋Ÿฐํƒ€์ž„ ํŽ˜๋„ํ‹ฐ ๋ฐœ์ƒ

์˜์กด์„ฑ ์ฃผ์ž…์˜ ์›์น™

  • ์ƒ์œ„ ๋ชจ๋“ˆ์€ ํ•˜์œ„๋ชจ๋“ˆ์—์„œ ์–ด๋–ค ๊ฒƒ๋„ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์•„์•ผ ํ•จ
  • ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•˜๋ฉฐ, ์ถ”์ƒํ™”๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•˜์ง€ ๋ง์•„์•ผ ํ•จ
๋ฐ˜์‘ํ˜•

'๐Ÿ“š Computer Science > Design Pattern' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋””์ž์ธ ํŒจํ„ด] ํŒฉํ† ๋ฆฌ ํŒจํ„ด (Factory Pattern)  (0) 2023.03.17