μ΅κ·Ό νλ‘μ νΈμμ μ±κΈν€ ν¨ν΄μ μ¬μ©ν΄λ³΄κ² λμλλ°μ!
μ±κΈν€ ν¨ν΄μ μ λλ‘ μκ³ μ°κ³ μ μ±κΈν€ ν¨ν΄μ λν΄ μ 리ν΄λ³΄λ €κ³ ν©λλ€.
Singletonμ μ μ, μ¬μ©μ΄μ , μ¬μ©λ°©λ² μμΌλ‘ μ 리ν΄λκ°λ³΄λλ‘ νκ² μ΅λλ€!
μ±κΈν€ ν¨ν΄(Singleton Pattern)μ΄λ?
μννΈμ¨μ΄ λμμΈ ν¨ν΄μμ μ±κΈν΄ ν¨ν΄(Singleton pattern)μ λ°λ₯΄λ ν΄λμ€λ, μμ±μκ° μ¬λ¬ μ°¨λ‘ νΈμΆλλλΌλ μ€μ λ‘ μμ±λλ κ°μ²΄λ νλμ΄κ³ μ΅μ΄ μμ± μ΄νμ νΈμΆλ μμ±μλ μ΅μ΄μ μμ±μκ° μμ±ν κ°μ²΄λ₯Ό 리ν΄νλ€. μ΄μ κ°μ λμμΈ μ νμ μ±κΈν΄ ν¨ν΄μ΄λΌκ³ νλ€. [μΆμ²] μν€λ°±κ³Ό
μ±κΈν€μ λμμΈ ν¨ν΄ μ€ μμ± ν¨ν΄μ ν΄λΉνλ λμμΈ μ νμΌλ‘,
ν΄λμ€κ° μ¬λ¬ μ°¨λ‘ νΈμΆλλλΌλ λ± ν κ°μ²΄λ§ μμ±λκΈ° λλ¬Έμ
κ°μ²΄λ₯Ό νλλ§ μμ±νμ¬ μ¬λ¬ κ³³μμ 곡μ©μΌλ‘ μ¬μ©νκ³ μΆμ λ μ¬μ©νλ λμμΈ ν¨ν΄μ λλ€.
μ±κΈν€. μ μ°λ건λ°?
μ±κΈν€ ν¨ν΄μ μ¬μ©νλ μ΄μ λ λκΉμ?
μμ λ‘ λ³΄λλ‘ ν©μλ€!
μλμ κ°μ μ μ μ μ 보λ₯Ό μ μ₯νλ ν΄λμ€κ° μλ€κ³ ν΄λ΄ μλ€.
class UserInfo {
var id: String?
var pw: String?
var name: String
}
λ§μ½, A ViewControllerμμ name, B ViewControllerμμ id, C ViewControllerμμ pw μ 보λ₯Ό λ°μμ
μ΄ ν΄λμ€(UserInfo)μ μ μ₯ν΄μΌλλ€λ©΄
// A ViewController
let userInfo = UserInfo()
userInfo.name = "Jane"
// B ViewController
let userInfo = UserInfo()
userInfo.id = "janechoi123"
// C ViewController
let userInfo = UserInfo()
userInfo.pw = "123456"
μμ κ°μ΄ μΈ κ°μ Viewcontrollerμμ UserInfo κ°μ²΄λ₯Ό κ°κ° λ°λ‘ μμ±νμ¬ id, pw, name μ 보λ₯Ό μ μ₯νκ²λ©λλ€.
μ΄λ κ² λλ©΄, κ·Έλ¦Όκ³Ό κ°μ΄ κ°κ°μ μΈμ€ν΄μ€(instance)μ μ λ³΄κ° λ°λ‘ μ μ₯μ΄ λκ² μ£ ?
κ·Έλ μ§λ§, μ°λ¦¬λ νλμ μΈμ€ν΄μ€μ λͺ¨λ μ 보(id, pw, name)κ° μ μ₯λλ κ²μ μν©λλ€.
μ΄λ΄ λ! μ±κΈν€ ν¨ν΄μ μ¬μ©ν΄μ μ΄ ν΄λμ€μ λν μΈμ€ν΄μ€λ μ΅μ΄ μμ± μμ μ μμΌλ‘ μ μ₯ν΄λκ³ ,
κ·Έ μ΄νμ μ΄ μ μ μΈμ€ν΄μ€(νλλ§ μ‘΄μ¬)μ μ κ·Όνλλ‘ νλ λ°©λ²μ μ¬μ©νλ κ²μ λλ€.
μμ κ·Έλ¦Όκ³Ό κ°μ΄ ν μΈμ€ν΄μ€μ μ¬λ¬ κ³³μμ μ κ·Όμ΄ κ°λ₯νλλ‘ νλ κ²μ΄ λ°λ‘ μ±κΈν€μ λλ€!
μ¬κΈ°μ μ μλ³μμ κ°μ μν μ νλλ° μ κ΅³μ΄ μ±κΈν€μ μ¨μΌνλ? λΌλ μλ¬Έμ΄ λ€ μκ° μμν λ°μ,
μ±κΈν€μ λ©λͺ¨λ¦¬λ©΄μμ μ₯μ μ΄ ν½λλ€.
λ§μ½μ λ§μ λ©λͺ¨λ¦¬λ₯Ό μ‘μλ¨Ήλ ν΄λμ€κ° μμ λ, μ μ λ³μλ‘ μ μΈνκ² λλ©΄ μ΄λ₯Ό μ¬μ©νμ§ μμ λλ λ©λͺ¨λ¦¬λ₯Ό μ‘μλ¨Ήκ² λ©λλ€.
νμ§λ§, μ±κΈν€μ μμ± μμ λΆν° λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκ³ , μ¬μ©νμ§ μμ λ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν μ μκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ λλΉλ₯Ό λ°©μ§ν μ μλ€λ μ₯μ μ΄ μμ΅λλ€.
νμ§λ§, μ΄κ²μ΄ λ¨μ μ΄ λ μλ μκ² μ£ ??
μ΄λ κ³³μμλ μ κ·Όμ΄ κ°λ₯νκΈ° λλ¬Έμ μ±μ κ·λͺ¨κ° 컀μ§λ€λ©΄ λ©λͺ¨λ¦¬ κ΄λ¦¬κ° μ΄λ €μμ§ μ μκΈ° λλ¬Έμ ν΄μ§κ° μ΄λ €μμ§ μ μμ΅λλ€.
λν νλμ μΈμ€ν΄μ€λ₯Ό 곡μ νκΈ° λλ¬Έμ κ°μ²΄ κ° μμ‘΄μ±μ΄ μ»€μ§ νλ₯ μ΄ λμ΅λλ€.
λ©ν°μ€λ λ νκ²½μμ μ± μ μμμ μ κ·Όν μ μλ€λ©΄ κ°κΈ° λ€λ₯Έ μ€λ λμμ κ°μ²΄μ μνλ₯Ό λ³κ²½μν¬ μ μμ΄ λμμ±μ λ¬Έμ κ° μκΈΈ μλ μμ΅λλ€. (μ λ μκ³ μΆμ§ μμμ΅λλ€.. μ΄λ¬ν λ¨μ λλ¬Έμ μν°ν¨ν΄μ΄λΌκ³ λΆλ¦¬κΈ°λ ν©λλ€)
κ·Έλμ μ΄λ»κ² μ°λ건λ°?
μ΄μ μ±κΈν€ ν¨ν΄μ μ¬μ©ν΄λ΄ μλ€!
1. static νλ‘νΌν°λ‘ Instance μμ±
class UserInfo {
static let shared = UserInfo()
var id: String?
var pw: String?
var name: String?
}
λ¨Όμ , μ μμΌλ‘ μ μ₯λ κ²μ΄κΈ° λλ¬Έμ
static ν€μλλ₯Ό μ΄μ©ν΄ ν΄λμ€ μμ μΈμ€ν΄μ€(instance)λ₯Ό μ μ₯ν νλ‘νΌν°λ₯Ό νλ μμ±ν΄μ€λλ€.
(μ±κΈν€ ν¨ν΄μ μ°Έμ‘° νμ μλ§ κ°λ₯νκΈ° λλ¬Έμ classλ₯Ό μ΄μ©ν΄μΌ ν©λλ€.)
2. init() privateμΌλ‘ μ κ·Όμ μ΄
class UserInfo {
static let shared = UserInfo()
var id: String?
var pw: String?
var name: String?
private init() { }
}
μμ±μμΈ init()μ privateμΌλ‘ μ κ·Όμ μ΄ ν΄μ€λλ€.
μΈλΆμ μ κ·Όμ μ°¨λ¨μμΌμ UserInfoν΄λμ€μ shared μΈμ€ν΄μ€λ‘λ§ μ κ·Ό κ°λ₯νλλ‘ μ ννλ κ²μ΄ μ±κΈν€ ν¨ν΄μ λλ€.
μ΄λ κ² κ°λ¨νκ² μ±κΈν€ κ°μ²΄λ₯Ό λ§λ€μ΄μ€ μ μμ΅λλ€!
κ·Έλ λ€λ©΄ μΈλΆμμλ μ΄λ»κ² μ κ·Όν κΉμ?
3. Singleton Class μ κ·Ό λ°©λ²
μμ±ν΄μ£Όμλ static νλ‘νΌν°λ₯Ό μ΄μ©νλ©΄ λ©λλ€.
μ΄λ ν΄λμ€μμλ sharedλΌλ static νλ‘νΌν°λ‘ μ κ·Όνλ©΄, νλμ μΈμ€ν΄μ€λ₯Ό 곡μ νλ κ²μ λλ€.
κ·Έλ κΈ° λλ¬Έμ, μλμ κ°μ΄ λ€λ₯Έ ViewControllerμμ λμΌν μΈμ€ν΄μ€μ μ κ·Όν΄ κ°μ μ ν΄μ€ μλ μκ³ ,
// A ViewController
let userInfo = UserInfo.shared
userInfo.name = "Jane"
// B ViewController
let userInfo = UserInfo.shared
userInfo.id = "janechoi123"
// C ViewController
let userInfo = UserInfo.shared
userInfo.pw = "123456"
μ΄λ κ² μ μ₯λ κ°μ κ°μ Έμ μ¬μ©ν΄μ€ μλ μμ΅λλ€.
// D ViewController
let userInfo = UserInfo.shared
print(userInfo.name ?? "")
μ°Έκ³ μλ£
https://ko.wikipedia.org/wiki/μ±κΈν΄_ν¨ν΄
http://blog.whatifill.com/blog/design-patterns-with-swift
https://babbab2.tistory.com/66
https://ggasoon2.tistory.com/5
'π iOS > Design Pattern' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Design Pattern] ꡬ쑰ν¨ν΄ - Adapter Pattern (0) | 2022.05.20 |
---|