Skip to content

Latest commit

ย 

History

History
102 lines (73 loc) ยท 3.4 KB

SingletonPattern-junha.md

File metadata and controls

102 lines (73 loc) ยท 3.4 KB

[์ƒ์„ฑ ํŒจํ„ด] SingletonPattern


์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์ด๋ž€?

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


์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ + ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์šฐ๋ฆฌ๊ฐ€ swif๋ฅผ ํ•˜๋ฉด์„œ ํšŒ์›์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์•ผํ•  ์ƒํ™ฉ์ด ์˜จ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค. 1VC๋Š” name์„ ๋ฐ›๊ณ  2VC๋Š” password๋ฅผ ๋ฐ›๊ณ  3VC๋ฅผ ๋ฐ›๋Š” ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ํ‰์†Œ์šฐ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ฐ‘์— ์ฒ˜๋Ÿผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.


Class UserInFo {
    var name: String
    var password: String
    var age: Int
}

//1VC = name
Class 1VC {
    let u = UserInFo()
    u.name = "ํ•˜ํ•˜"
    u.password = nil
    u.age = nil
}

// 2VC = password
Class 2VC {
    let u = UserInFo()
    u.name = nil
    u.password = "12345678"
    u.age = nil
}

// 3VC = age
Class 3VC {
    let u = UserInFo()
    u.name = nil
    u.password = nil
    u.age = 18
}

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


์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์„ ๊ตฌ์กฐ์ฒด๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ• ๊นŒ..?

์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์€ ์ฃผ๋กœ Class์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋‹ค๋ฐ˜์‚ฌ์ง€๋งŒ ๋ฌผ๋ก  ๊ตฌ์กฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค? ์ด๊ฑฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌ์กฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์—์„œ ์ œ์ผ ์ค‘์š”ํ•œ ์œ ์ผ ๊ฐ์ฒด์— ์–ด๊ธ‹๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ตฌใ…œ์กฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ฒŒ ๋  ๋•Œ ๊ตฌ์กฐ์ฒด๋Š” ์œ ์ผ ๊ฐ์ฒด๊ฐ€ ๋˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌ์กฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šคํ™”๋งŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ตฌ์กฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ„ด ํŽ˜ํ„ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋Š” ํ•ฉ๋‹ˆ๋‹ค.


์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • ์œ ์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋“ค์—๊ฒŒ ๊ณต์œ ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ์ค‘๋ณต ๋ฐฉ์ง€

๋‹จ์ 

  • ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์€ ์ธ์Šคํ„ด์Šค๋“ค ๊ฐ„์— ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ์„œ OCP(๊ฐœ๋ฐฉ ํŒจ์‡„ ์›์น™)์„ ์œ„๋ฐ˜ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ผ ๊ฒฝ์šฐ ์‹ฑ๊ธ€ํ„ด ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค
  • ์ˆ˜์ •๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค

์šฐ๋ฆฌ์˜ ๊ฐœ๋ฐœ ์† ์ž ์ž…ํ•ด์žˆ์—ˆ๋˜ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ์‚ฌ์šฉํ•˜๋Š”

  • UIScreen.main
  • URLSession.shared
  • UserDefaults.standard
  • NotificationCenter.default

๋“ฑ๋“ฑ ์— ์ „๋ถ€ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


์‹ฑ๊ธ€ํ„ด ํŒจํ„ด ์ฝ”๋“œ ์˜ˆ์ œ

Singleton Pattern ์˜ˆ์ œ์ฝ”๋“œ


์˜ค๋Š˜๋„ ๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.!!!!