Skip to content

Latest commit

ย 

History

History
176 lines (119 loc) ยท 5.88 KB

2_Singleton_Swift.md

File metadata and controls

176 lines (119 loc) ยท 5.88 KB

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

ํŠน์ • ์šฉ๋„๋กœ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜์—ฌ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ์ฐจ๋ก€ ํ˜ธ์ถœ๋˜๋”๋ผ๋„, ์ธ์Šคํ„ด์Šค๋Š” ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ „์—ญ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ฝ”๋“œ์˜ ์–ด๋Š ๊ณณ์—์„œ ์ ‘๊ทผํ•˜๋˜ ๊ฐ„์— ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

ํ–„๋ฒ„๊ฑฐ

Untitled

์Šค์žฅ๋‹˜์ฒ˜๋Ÿผ ํ–„๋ฒ„๊ฑฐ์— ๋Œ€ํ•˜์—ฌ ํ•œ ๋ฒˆ ๋น„์œ ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์— ํ–„๋ฒ„๊ฑฐ ๋ชจ๋ธ์ด

class BuggerInfo {
    var bun: String?
    var patty: String?
    var vegatable: String?
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žˆ๊ณ , 3๋ช…์˜ ํ–„๋ฒ„๊ฑฐ ์ œ์ž‘์ž๊ฐ€ ํ–„๋ฒ„๊ฑฐ๋ฅผ ์™„์„ฑ ์‹œํ‚ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


let userInfo = BuggerInfo()
userInfo.bun = "๋ชจ์นด๋ฒˆ"

//bunVC
let userInfo = BuggerInfo()
userInfo.patty = "๋ถˆ๊ณ ๊ธฐ"

//pattyVC
let userInfo = BuggerInfo()
userInfo.vegatable = "ํ”ผํด"

//vegetableVC
  • ๊ฐ๊ฐ์˜ ๋‹ด๋‹น์ž๋“ค์ด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ๊ฐ ์„ ์–ธํ•˜๊ณ , ์ •๋ณด๋ฅผ ํ•˜๋‚˜์”ฉ ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์š”!
class BuggerInfo {
    var bun = "๋ชจ์นด๋ฒˆ"
    var patty = nil
    var vegatable = nil
}

class BuggerInfo {
    var bun = nil
    var patty = "๋ถˆ๊ณ ๊ธฐ"
    var vegatable = nil
}

class BuggerInfo {
    var bun = nil
    var patty = nil
    var vegatable = "ํ”ผํด"
}

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฑด ํ•œ ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋œ ํ–„๋ฒ„๊ฑฐ์˜ ์ •๋ณด์—์š”

  • ๋ฌผ๋ก  ๊ฐ๊ฐ์˜ ์žฌ๋ฃŒ๋‹ด๋‹น์ž๋“ค์ด ์„œ๋กœ ์ฐธ์กฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋„ˆ๋ฌด๋‚˜ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค.. (BunVC โ†’ PattyVC โ†’ VegetableVC)

๊ทธ๋ž˜์„œ ํ–„๋ฒ„๊ฑฐ๋งค๋‹ˆ์ €๋ฅผ ๊ณ ์šฉํ•˜๊ธฐ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

class BuggerManager {
    static let shared = BugerInfo()
    // 1๊ฐœ๋งŒ ๋งŒ๋“ค๊ฑฐ์•ผ

    var bun: String?
    var patty: String?
    var vegatable: String?
    
    private init() {}
    // ๋‚˜ ๋นผ๊ณ ๋Š” ๋งŒ๋“ค์ง€๋งˆ
}
  • ์ด๋ ‡๊ฒŒ ์ค‘์•™์— ๋ฒ„๊ฑฐ๋งค๋‹ˆ์ €๋ฅผ ๋†“๋Š”๋‹ค๋ฉด, ๊ฐ๊ฐ์˜ ์žฌ๋ฃŒ ๋‹ด๋‹น์ž๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ์„ ์–ธํ•  ํ•„์š”์—†์ด ๋ฐ”๋กœ๋ฐ”๋กœ ์ •๋ณด๋ฅผ ํ•œ๊ณณ์—๋‹ค ๋ฐ”๊ฟ”์ค„ ์ˆ˜ ์žˆ์–ด์š”!

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์žฅ๋‹จ์ 

์žฅ์ 

  • ์ธ์Šคํ„ด์Šค๊ฐ€ 1๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค

โ†’ ๊ฐ๊ฐ ๋‹ด๋‹น์ž๊ฐ€ BuggerInfo๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค, BuggerManager๊ฐ€ 1๋ฒˆ๋งŒ ์ƒ์„ฑํ•ด์„œ Good!

  • ์ „์—ญ ์ธ์Šคํ„ด์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์ž์› ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค

โ†’ BuggerManager๋งŒ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉด ๋œ๋‹ต๋‹ˆ๋‹ค!

  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค์–ด ๊ฐ์ฒด ์ ‘๊ทผ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ ๋‹ค

โ†’ ๊ฐ๊ฐ ์žฌ๋ฃŒ ๋‹ด๋‹น์ž๋“ค์ด ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ ๋ณด๋‹ค, ๋ฐ”๋กœ ๋ฒ„๊ฑฐ๋งค๋‹ˆ์ €๊ฐ€ ์ด๋ฏธ ํ•œ๋ฒˆ ๋งŒ๋“  ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค์‹œ ์ ‘๊ทผํ•˜๋ฉด ๋น ๋ฆ…๋‹ˆ๋‹ค!

๋‹จ์ 

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

**โ†’ ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„๊ณผ ๋ฌถ์—ฌ ์žˆ๋‹ค๋ฉด?, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•  ๋•Œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ย 

โ†’ ์˜†๋™๋„ค ๋กฏ๋ฐ๋ฆฌ์•„, ๋งฅ๋„๋‚ ๋“œ, ๋ฒ„๊ฑฐํ‚น์ด ๋‹ค ์ด ๋งค๋‹ˆ์ €๋ฅผ ์“ด๋‹ค๋ฉด?

โ†’ ๋งฅ๋„๋‚ ๋“œ๊ฐ€ ํŒจํ‹ฐ ์ž˜๋ชป ๊ตฌ์šฐ๋ฉด ์ค„ํ์—…์ด๋‹ค.**

  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ฐ์ฒด๊ฐ€ 2๊ฐœ ์ƒ์„ฑ๋˜๋Š” ์œ„ํ—˜์ด ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ๋‹ค

โ†’ ์œ„์˜ ๋‹จ์ ์—์„œ ์–ธ๊ธ‰ํ•œ๊ฒƒ๊ณผ ๊ฐ™์ด, ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋Š” ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ํด๋ž˜์Šค์— ๋™์‹œ์— ์ ‘๊ทผํ•  ์‹œ ๊ฐ์ฒด๊ฐ€ 2๊ฐœ ์ƒ์„ฑ๋˜๋Š” ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Thread-Safe ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ†’ ํ•˜์ง€๋งŒ Swift์—์„œ๋Š” static let shared = BugerInfo()

static let์„ ํ†ตํ•˜์—ฌ 1ํšŒ ์ƒ์„ฑ์„ ๋ณด์žฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค!

์‚ฌ์šฉ ์˜ˆ์ œ

  1. UIScreen.main
  2. URLSession.shared
  3. NotificationCenter.default
  4. UserDefaults.standard
  • ์‚ฌ์šฉ ์ด์œ 
    1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋Ÿฐํƒ€์ž„ ๋™์•ˆ์—๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฃผ ํ™”๋ฉด์ด ์กด์žฌํ•˜๋ฏ€๋กœ, **UIScreen.main**์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ๋˜๋Š” ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค.
    2. ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
    3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๋ฒคํŠธ๋ฅผ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
    4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •์ด๋‚˜ ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ์„ค์ •๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์„ค์ •์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ

class SignUpManager {
    static let shared = SignUpManager()
    
    var averageUseTime: String = "1"
    var problem: [String] = ["12"]
    var period: Int = 3
    var goalTime: Int = 3
    var appCode: [Apps] = [Apps(appCode: "#25393", goalTime: 76000),
                           Apps(appCode: "#25391", goalTime: 89000)]
}
  • ์˜จ๋ณด๋”ฉ ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ VC๋กœ ๋ถ€ํ„ฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ SignUpManager๋ผ๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
   func didTapButton() {
        let nextViewController = ProblemSurveyViewController()
        self.navigationController?.pushViewController(nextViewController, animated: false)
        **SignUpManager.shared.averageUseTime = selectedText**
    }
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”!

๋Š๋‚€์ 

  • ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ์ฒ˜์Œ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค! ์™œ ์“ฐ๋Š”์ง€ ์•Œ์•„์„œ ์ข‹์•˜๋‹ค.