μλ νμΈμ~
μ€λμ νλ‘ν μ½μ λν΄μ μ 리νλ €κ³ ν©λλ€ : )
νλ‘ν μ½μ΄λ 무μμΈκ°?
νλ‘ν μ½(protocol)μ νΉμ μμ λλ κΈ°λ₯μ μννκΈ° μν λ©μλ, νλ‘νΌν°, κΈ°ν μꡬμ¬ν λ±μ μ²μ¬μ§μ λλ€.
νλ‘ν μ½μ μ΄λ€ νμ μ΄λ ν΄λΉ νλ‘ν μ½μ μ±νν μ μλλ‘ μ μλ©λλ€.
νλ‘ν μ½μ λ€μκ³Ό κ°μ΄ μ μλ©λλ€.
protocol MyProtocol {
// νλ‘ν μ½ μ μ
}
νλ‘ν μ½μ ν΄λμ€, ꡬ쑰체, μ΄κ±°ν λ± λͺ¨λ νμ μ μ μ©λ μ μμ΅λλ€.
νλ‘ν μ½μμ μ μλ μꡬμ¬νμ ꡬνν νμ μ ν΄λΉ νλ‘ν μ½μ μ±ν(adopt)νλ€κ³ ν©λλ€.
νλ‘ν μ½μ μ¬μ©λ°©λ²
1. λ©μλ
νλ‘ν μ½μμ λ©μλλ₯Ό μ μνλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
protocol MyProtocol {
func myMethod()
}
μμ μμ μμ MyProtocolμ myMethod()λΌλ μꡬμ¬νμ μ μν©λλ€.
μ΄ μꡬμ¬νμ νλ‘ν μ½μ μ±νν νμ μμ λ°λμ ꡬνλμ΄μΌ ν©λλ€.
class MyClass: MyProtocol {
func myMethod() {
// ꡬν
}
}
μμ μμ μμ MyClassλ MyProtocol νλ‘ν μ½μ μ±ννκ³ , myMethod()λ₯Ό ꡬνλμ΄ μλ κ²μ λ³Ό μ μμ΅λλ€.
2. νλ‘νΌν°
νλ‘ν μ½μμ νλ‘νΌν°λ₯Ό μ μΈνλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
protocol MyProtocol {
var myProperty: Int { get set }
}
μμ μμ μμ MyProtocolμ myPropertyλΌλ μꡬμ¬νμ μ μν©λλ€.
μ΄ μꡬμ¬νμ μ½κ³ μΈ μ μλ Int νμ μ νλ‘νΌν°λ‘, νλ‘ν μ½μ μ±νν νμ μμ λ°λμ ꡬνλμ΄μΌ ν©λλ€.
νλ‘νΌν°μ κ²½μ°, λ°λμ varλ‘ μ μΈλμ΄μΌ νλ©°
{ get }, νΉμ { get set }μΌλ‘ gettable, settable ν μ§ λͺ μν΄μΌ ν©λλ€.
class MyClass: MyProtocol {
var myProperty: Int = 0
}
μμ μμ μμ MyClassλ MyProtocol νλ‘ν μ½μ μ±ννκ³ , myPropertyλ₯Ό ꡬνλμ΄ μλ κ²μ λ³Ό μ μμ΅λλ€.
DelegationμΌλ‘μ νμ©
νλ‘ν μ½μ μ΄μ©νμ¬ λΈλ¦¬κ²μ΄μ ν¨ν΄μ ꡬνν μ μμ΅λλ€.
μ΄λ κ°μ²΄μ§ν₯ λμμΈ ν¨ν΄ μ€ νλλ‘, κ°μ²΄κ° μμ μ νλ μΌλΆλ₯Ό λ€λ₯Έ κ°μ²΄μκ² μμνλ κ²μ μλ―Έν©λλ€.
λΈλ¦¬κ²μ΄μ ν¨ν΄μμλ λΈλ¦¬κ²μ΄νΈ(delegate) νλ‘ν μ½μ μ μνκ³ , μ΄λ₯Ό μ±νν λΈλ¦¬κ²μ΄νΈ κ°μ²΄(delegate object)κ° λΈλ¦¬κ²μ΄νΈλ₯Ό ꡬνν©λλ€. κ·Έλ¦¬κ³ μ΄ λΈλ¦¬κ²μ΄νΈ κ°μ²΄λ₯Ό λ€λ₯Έ κ°μ²΄μκ² ν λΉνμ¬ νΉμ νλμ μμν©λλ€.
protocol MyDelegate {
func didSomething()
}
class MyClass {
var delegate: MyDelegate?
func doSomething() {
print(#function)
delegate?.didSomething()
}
}
class MyDelegateImpl: MyDelegate {
func didSomething() {
print(#function)
}
}
let myClass = MyClass()
let myDelegate = MyDelegateImpl()
myClass.delegate = myDelegate
myClass.doSomething() // myDelegate.didSomething()μ΄ νΈμΆλ©λλ€.
// κ²°κ³Ό
/*
doSomething()
didSomething()
*/
μμ μμ μμ MyDelegateλ λΈλ¦¬κ²μ΄νΈ μꡬμ¬νμ μ μνκ³ , MyClassλ MyDelegate νλ‘ν μ½μ μ±ννκ³ μλ μμ μ λλ€. MyClassλ doSomething()μ΄ νΈμΆλ λ, delegateμ ν λΉλ λΈλ¦¬κ²μ΄νΈ κ°μ²΄μ didSomething()μ νΈμΆν©λλ€. μ΄λ MyDelegateImplμ MyDelegate νλ‘ν μ½μ ꡬννκ³ , didSomething()μ ꡬννμ¬ MyClassμμ μμλ°μ νλμ μνν©λλ€.
AnyObject μ±ν
νλ‘ν μ½μ AnyObjectλ₯Ό μ±νν μ μμ΅λλ€. μ΄λ ν΄λΉ νλ‘ν μ½μ΄ ν΄λμ€ νμ μμλ§ μ¬μ©λ μ μλ€λ κ²μ μλ―Έν©λλ€.
protocol MyProtocol: AnyObject {
// Requirements
}
μμ μμ μμ MyProtocolμ AnyObjectλ₯Ό μ±ννκ³ , ν΄λμ€ νμ μμλ§ μ¬μ©λ μ μλ νλ‘ν μ½μμ λͺ μνκ³ μμ΅λλ€.
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Classμ Structμ λν΄μ (0) | 2023.04.07 |
---|---|
[Swift] Delegate Pattern(λ리κ²μ΄νΈ ν¨ν΄)μ λν΄μ (0) | 2023.04.04 |
[Swift] Copy on write(COW)μ λν΄μ (0) | 2023.03.30 |
[Swift] 컬λ μ νμ (Collection Type)μ λν΄μ (0) | 2023.03.26 |
[Swift] Enum(μ΄κ±°ν)μ λν΄μ (0) | 2023.03.22 |