ꡬ쑰 ν¨ν΄
μ΄λν° ν¨ν΄μ λμμΈν¨ν΄ μ€ κ΅¬μ‘° ν¨ν΄μ ν΄λΉνκΈ° λλ¬Έμ, ꡬ쑰 ν¨ν΄μ΄ 무μμΈμ§ λΆν° μμλ³΄κ² μ΅λλ€!
ꡬ쑰 ν¨ν΄μ ν΄λμ€μ κ°μ²΄κ° μ΄λ»κ² ꡬμ±λλμ§μ κ΄λ ¨μ΄ μμ΅λλ€.
ꡬ쑰 ν¨ν΄μ μλ‘μ΄ κΈ°λ₯μ ꡬννκΈ° μν΄ μΈν°νμ΄μ€λ ꡬνμΌλ‘ μ²λ¦¬νκΈ° 보λ€λ κ°μ²΄λ₯Ό ꡬμ±νλ λ°©λ²μ μ μν©λλ€. μ΄λ κ² μΆκ°λ κΈ°λ₯λ€μ μ μ°μ±μ λ°νμμμ ꡬμ±μ λ³κ²½ν μ μλ λ₯λ ₯μμ λΉλ‘―λλ©°, μ μ ν΄λμ€λ‘λ ν μ μλ μΌμ
λλ€.
κ°λ¨νκ² λ§ν΄μ ꡬ쑰 ν¨ν΄μ μ¬λ¬κ°μ λ 립μ μΈ ν΄λμ€λ₯Ό νλμ²λΌ μ¬μ©ν λ μ¬μ©νκ±°λ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ν΅ν©νμ¬ νλμ μΈν°νμ΄μ€λ‘ λ§λλ ν¨ν΄μ΄λΌκ³ ν μ μμ΅λλ€.
Adapter Pattern (μ΄λν° ν¨ν΄)
μ΄λν° ν¨ν΄μ νΈνλμ§ μλ μΈν°νμ΄μ€λ₯Ό κ°μ§ λ κ°μ κ°μ²΄κ° ν¨κ» λμν μ μλλ‘ ν΄μ£Όλ ꡬ쑰 μ€κ³ ν¨ν΄μ
λλ€.
νΉμ κ°μ²΄μ μΈν°νμ΄μ€λ₯Ό λ³νν΄μ λ€λ₯Έ κ°μ²΄μ μ μμμΌ μ¬μ©ν μ μκ² λμμ£Όμ΄,
μΈν°νμ΄μ€κ° μλ‘ λ€λ₯Έ νμ
μ΄ λμΌν νμμΌλ‘ μλν μ μλλ‘ λ§λ€μ΄ μ€λλ€.
ν΄μΈμ¬νκ°λ©΄ μ°λ¦¬λλΌμμ μ°λ 220Vμ© μ½μΌνΈκ° λ§μ§ μλ λλΌλ€λ λ§μμ μ΄λν° μ±κ²¨κ°μμμ??
ν΄λΉ λλΌμ κ·κ²©μ λ§μ§ μλ μ½μΌνΈλ₯Ό μ΄λν°λ₯Ό μ°κ²°ν΄ μ¬μ©ν μ μκ² λλ κ² μ²λΌ,
μλ‘ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό κ°μ§ κ°μ²΄λ₯Ό μ΄λν° ν¨ν΄μ΄ ν¨κ» μ¬μ©ν μ μλλ‘ λ³νν΄μ£Όλ μν μ νλ€κ³ μ΄ν΄νλ©΄ μ¬μΈ κ² κ°μ΅λλ€.
Adapter ν¨ν΄μ UMLλ‘ λμννλ©΄ μλμ κ°μ΅λλ€.
- Client : μΈλΆ λΌμ΄λΈλ¬λ¦¬λ μμ€ν μ μ¬μ©νλ €λ κ°μ²΄
- Adaptee : μΈλΆ λΌμ΄λΈλ¬λ¦¬ λ° μΈλΆ μμ€ν κ°μ²΄(κΈ°μ‘΄ κ°μ²΄) → μΈν°νμ΄μ€κ° λ€λ₯΄κΈ° λλ¬Έμ λ°λ‘ μ¬μ©ν μ μλ€.
- Target : Adapterκ° κ΅¬ννλ μΆμ μΈν°νμ΄μ€ κ°μ²΄, ν΄λΌμ΄μΈνΈλ νκ²(Target)μ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μ Adapteeμ μΈν°νμ΄μ€λ₯Ό μ¬μ©νκ² λλ€. (λ€λ₯Έ ν΄λμ€κ° νμ¬ λ‘μ§μ ν¬ν¨λλ €λ©΄ λ°λΌμΌ νλ νλ‘ν μ½)
- Adapter : Adaptee(κΈ°μ‘΄ κ°μ²΄)μ ν΄λΌμ΄μΈνΈ λ λ€ μ¬μ©ν μ μλλ‘ μ€κ°μμ μ°κ²°μμΌμ£Όλ μν μ νλ€. νκ²(Target) μΈν°νμ΄μ€λ₯Ό ꡬννλ©° ν΄λΌμ΄μΈνΈλ νκ² μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ΄λν°μ μμ²μ 보λΈλ€. Adapterλ Client, Adaptee κ°μ²΄λ₯Ό λͺ¨λ λ€λ£° μ μκ³ Adaptee κ°μ²΄λ₯Ό Client μΈν°νμ΄μ€λ‘ λν νκ±°λ Client κ°μ²΄λ₯Ό Adaptee ν΄λμ€κ° μ¬μ©ν μ μλ νμμΌλ‘ λ³ννλ€.
→ Adapterλ₯Ό μ¬μ©νλ©΄ κΈ°μ‘΄ Client μ½λλ₯Ό μμ νμ§ μκ³ λ μλ‘μ΄ ν΄λμ€λ€μ μ¬μ©ν μ μμ΅λλ€.
μκΉ μ½μΌνΈλ‘ μμλ₯Ό λ€μλλ° μλ κ² μ λΉμ ν΄ λμ κ·Έλ¦Όμ΄ μλλΌκ΅¬μ??
μ°Έκ³ ν΄λ³΄μλ©΄ μ΄λν° ν¨ν΄μ λλ΅μ μΌλ‘ μ΄ν΄νλ λ° λμμ΄ λ κ² κ°μ΅λλ€ππ
μμμ½λ
μ¬μ΄ μ΄ν΄λ₯Ό μν΄ κ°λ¨ν μμ μ½λλ₯Ό λ³΄κ² μ΅λλ€.
/// Adapterκ° κ΅¬ννλ μΆμ μΈν°νμ΄μ€ κ°μ²΄.
/// ν΄λΌμ΄μΈνΈλ Targetμ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μ Adapteeμ μΈν°νμ΄μ€λ₯Ό μ¬μ©νκ² λλ€.
class Target {
func request() -> String {
return ""
}
}
// μΈλΆ λΌμ΄λΈλ¬λ¦¬ λ° μΈλΆ μμ€ν
κ°μ²΄(κΈ°μ‘΄ κ°μ²΄)
class Adaptee {
public func specificRequest() -> String {
return "Adaptee's specificRequest."
}
}
// μΈν°νμ΄μ€μ νΈνλλλ‘ ν΄μ£Όλ μ΄λν°
// νκ²(Target) μΈν°νμ΄μ€λ₯Ό ꡬννλ©° ν΄λΌμ΄μΈνΈλ νκ² μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ΄λν°μ μμ²μ 보λΈλ€.
class Adapter: Target {
private var adaptee: Adaptee
init(_ adaptee: Adaptee) { // μμ‘΄μ± μ£Όμ
self.adaptee = adaptee
}
override func request() -> String { // μΆμ μΈν°νμ΄μ€ κ°μ²΄ μμλ°μμ ν¨μ μ¬μ μ
return self.adaptee.specificRequest() }
}
// μΈλΆ λΌμ΄λΈλ¬λ¦¬λ μμ€ν
μ μ¬μ©νλ €λ κ°μ²΄
class Client {
static func specificRequest(target: Target) {
print("Call from adapter - \(target.request())")
}
}
let adaptee = Adaptee()
print(adaptee.specificRequest())
// Adaptee's specificRequest.
Client.specificRequest(target: Adapter(adaptee))
// Call from adapter - Adaptee's specificRequest.
μ΄λ€ μν©μμ μ¬μ©ν μ μμκΉ?
- νλμ μλΉμ€μμ μ¬λ¬ νλ«νΌ κ³μ μΌλ‘ λ‘κ·ΈμΈ κΈ°λ₯μ μ§μνλ κ²½μ°
ex) μ± λ΄ κ³μ μμ±μ νκ³ λ‘κ·ΈμΈμ ν μ μλλ‘ λμ΄μλ μλΉμ€μμ μΆνμ μμ λ‘κ·ΈμΈ κΈ°λ₯μ μΆκ°νκ³ μΆλ€λ©΄?
λ€μ΄λ², μΉ΄μΉ΄μ€, μ ν λͺ¨λ λ€λ₯Έ ννμΌ μ μλλ°, κΈ°μ‘΄ λ‘κ·ΈμΈ μλΉμ€ νλ‘ν μ½μ μ±ννλ Adapterλ₯Ό μ¬μ©νμ¬ μλΉμ€λ₯Ό νμ₯ν μ μμ΅λλ€. - νμ¬μ λΌμ΄λΈλ¬λ¦¬λ λͺ¨λμ μ¬μ©ν΄μΌ ν λ, κ°μ νλ‘μ νΈμμ λ€λ₯Έ νμ΄ κ΅¬νν΄λμ ν΄λμ€μ κΈ°λ₯μ κ°μ Έλ€ μ¬μ©ν λ
ex) Aνμ΄ μ μ©μΉ΄λλ₯Ό λ±λ‘νκ³ μ‘°ννλ ν΄λμ€λ₯Ό λ§λ€μ΄ λμμ΅λλ€. Bνμ΄ μ΄ κΈ°λ₯μ νμ₯νκ³ μΆλ€λ©΄ Aνμ ν΄λμ€λ₯Ό μμλ°λ Adapterλ₯Ό μ¬μ©ν΄ μΆκ°μ μΈ κΈ°λ₯μ ꡬνν μ μμ κ² κ°μ΅λλ€.
[μ΄λ―Έμ§ μΆμ²]
https://www.slideshare.net/BillKim8/swift-adapter
[μ°Έκ³ μλ£]
'π iOS > Design Pattern' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Design Pattern] μ±κΈν€ ν¨ν΄(Singleton Pattern) (11) | 2022.02.08 |
---|