๐ฌ Introduction
ํ ์คํธํ๋ : ์ ์ ๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ๋๋ค.
์ ๋ ฅ๋ ๋์๋ค์ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํ๋ค.
์ด๋, ๋ธ๋ฆฌ๊ฒ์ดํธ(๋๋ฆฌ์) ํจํด์ด ํ์ํ๋ค.
์ฆ, ํ ์คํธ ํ๋์ ๋๋ฆฌ์๋ ๋ทฐ์ปจํธ๋กค๋ฌ๊ฐ ๋๋ค.
ํ ์คํธํ๋๋ผ๋ ๊ฐ์ฒด์ ๋ทฐ์ปจํธ๋กค๋ฌ๋ผ๋ ๊ฐ์ฒด๊ฐ ์์ ๋
ํ ์คํธํ๋์ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์์ฌ์ํต์ ์ํด ์ฌ์ฉํ๋๊ฒ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด
์ด ์์ฌ์ํต์ ํ๊ธฐ ์ํด์ ์ค๊ฐ์ ๋๋ฆฌ์(๋ธ๋ฆฌ๊ฒ์ดํธ)๋ ํ๋กํ ์ฝ ํ์ ์ผ๋ก ์ค์ ํ๊ณ
ํ๋กํ ์ฝ ํ์ ์ผ๋ก ๋์์ด ์ ๋ฌ๋๋ค.
๊ฐ์ฒด ๋ด์์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ค์ ํ๋ค๋ฉด self๋ผ๊ณ ์ค์ ํ ์ ์๋ค.
์๋ค๋ฉด ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ง์ ์ ์ผ๋ก ์ค์
๋ทฐ์ปจํธ๋กค๋ฌ๋ ํ ์คํธ ํ๋์ ํ๋กํ ์ฝ์ ์ฑํํด์ผ ํ๋ค.
์ด ํ๋กํ ์ฝ์ด ๊ฐ์ง๊ณ ์๋ ์ ํ์ ์ธ ์๊ตฌ์ฌํญ๋ค(๋ฉ์๋)์ ๊ตฌํํ๋ฉด
ํ ์คํธํ๋์์ ๋ฐ์ํ ๋ด์ฉ๋ค์ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํ ์ ์๋ค.
๐ 1 . ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด
Delegate : ๋๋ฆฌ์, ๋์ ์ํํ๋ ์ฌ๋, ์์์
protocol์ ๋์ ์ฒ๋ฆฌํด์ฃผ๊ธธ ๋ฐ๋ผ๋ ๋ด์ฉ์ ์์ฑํด์ ์์ํ๋ค.
๊ทธ ์ผ์ ์์ ๋ฐ์ ๊ฐ์ฒด๋ ๊ทธ ์ผ์ ๊ตฌ์ฒด์ ์ผ๋ก ๋์ ์ฒ๋ฆฌํ๋ค.
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ๊ตฌ์ฑ
1. ๋ธ๋ฆฌ๊ฒ์ดํธ ํ๋กํ ์ฝ ์ ์
๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด๊ฐ ๊ตฌํํด์ผ ํ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ํ๋กํ ์ฝ์ ๋ง๋ญ๋๋ค.
protocol MyDelegate: AnyObject {
func didPerformAction()
}
2. ๋ธ๋ฆฌ๊ฒ์ดํธ ํ๋กํผํฐ ์ ์
๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ํ๋กํผํฐ๋ฅผ ์ ์ํฉ๋๋ค. ๋ณดํต weak๋ก ์ ์ธํ์ฌ ๊ฐํ ์ฐธ์กฐ ์ํ(๋ฉ๋ชจ๋ฆฌ ๋์)์ ๋ฐฉ์งํฉ๋๋ค.
class MyClass {
weak var delegate: MyDelegate?
func performAction() {
// ์ด๋ค ์์
์ ์ํํ ํ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋๋ฅผ ํธ์ถ
delegate?.didPerformAction()
}
}
weak ํค์๋์ ์ญํ ๊ณผ ์ฌ์ฉ ์ด์
weak ํค์๋์ ์ญํ
weak ํค์๋๋ ์ฐธ์กฐ ์ํ(reference cycle)์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ฐธ์กฐ ์ํ์ ๋ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ๊ฐํ๊ฒ ์ฐธ์กฐํ๊ณ ์์ด, ๋ ๋ค ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋์ง ์๋ ์ํฉ์ ๋งํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. weak ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐํ ์ฐธ์กฐ๋ฅผ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ด์
์ฐธ์กฐ ์ํ ๋ฐฉ์ง: weak ์ฐธ์กฐ๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐํ๊ฒ ์ฐธ์กฐํ์ง ์๋๋ก ํ์ฌ ์ฐธ์กฐ ์ํ์ ๋ฐฉ์งํฉ๋๋ค.
์๋ ํด์ : weak ์ฐธ์กฐ๋ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋, ์๋์ผ๋ก nil๋ก ์ค์ ๋ฉ๋๋ค.
์์
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์์ weak ํค์๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฃผ๋ก ์ฐธ์กฐ ์ํ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์ ๋๋ค. ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์์ ๊ฐ์ฒด A๊ฐ ๊ฐ์ฒด B๋ฅผ ์ฐธ์กฐํ๊ณ , ๊ฐ์ฒด B๊ฐ ๊ฐ์ฒด A๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ธ๋ฆฌ๊ฒ์ดํธ ํ๋กํผํฐ๋ฅผ weak๋ก ์ ์ธํฉ๋๋ค.
protocol MyDelegate: AnyObject {
func didPerformAction()
}
class MyClass {
weak var delegate: MyDelegate?
func performAction() {
delegate?.didPerformAction()
}
}
class MyDelegateClass: MyDelegate {
func didPerformAction() {
print("Action was performed")
}
}
let myObject = MyClass()
let delegateObject = MyDelegateClass()
myObject.delegate = delegateObject
myObject.performAction()
์ฌ๊ธฐ์ MyClass์ delegate ํ๋กํผํฐ๋ฅผ weak๋ก ์ ์ธํจ์ผ๋ก์จ delegateObject๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ delegate ํ๋กํผํฐ๊ฐ ์๋์ผ๋ก nil๋ก ์ค์ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
3. ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด ๊ตฌํ
๋ธ๋ฆฌ๊ฒ์ดํธ ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ํ๋กํ ์ฝ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.
class MyDelegateClass: MyDelegate {
func didPerformAction() {
print("Action was performed")
}
}
4. ๋ธ๋ฆฌ๊ฒ์ดํธ ์ค์ ๋ฐ ์ฌ์ฉ
๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ธ๋ฆฌ๊ฒ์ดํธ ํ๋กํผํฐ์ ํ ๋นํฉ๋๋ค.
let myObject = MyClass()
let delegateObject = MyDelegateClass()
myObject.delegate = delegateObject
myObject.performAction() // "Action was performed" ์ถ๋ ฅ
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฅ๋จ์
์ฅ์
๊ฐ์ฒด ๊ฐ์ ์ฑ ์ ๋ถ๋ฆฌ: ๊ฐ์ฒด ๊ฐ์ ์ญํ ๊ณผ ์ฑ ์์ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ ๋๋ค.
์ ์ฐ์ฑ ์ฆ๊ฐ: ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฌ์ฉํ๋ฉด ๋์ผํ ์์ ์ ์ฌ๋ฌ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด ์ ์ฐ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
๊ฐํ ๊ฒฐํฉ๋ ๊ฐ์: ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ์ด ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ ๋๋ค.
๋จ์
๋ณต์ก์ฑ ์ฆ๊ฐ: ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์๋ชป ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
์ถ์ ์ด๋ ค์: ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋๊ฐ ์ฌ๋ฌ ๊ณณ์์ ํธ์ถ๋ ๊ฒฝ์ฐ, ์ฝ๋์ ํ๋ฆ์ ์ถ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
๐ 2. ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ์ด์ ?
1. ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ
ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์ต๋๋ค. ํ๋กํ ์ฝ์ ์ฑํํ ๊ฐ์ฒด๋ค์ ํน์ ํด๋์ค๋ ํ์ ์ ์ข ์๋์ง ์๊ณ , ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋๋ง ๊ตฌํํ๋ฉด ๋๋ฏ๋ก ๋ค์ํ ๊ฐ์ฒด์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ ๋๋ค.
2. ๋ช ํํ ๊ณ์ฝ
ํ๋กํ ์ฝ์ ๊ฐ์ฒด๊ฐ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ผ์ข ์ ๊ณ์ฝ(Contract)์ ๋๋ค. ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด๊ฐ ๊ตฌํํด์ผ ํ ๋ฉ์๋๊ฐ ๋ช ํํ ์ ์๋์ด, ๋ธ๋ฆฌ๊ฒ์ดํธ ์ญํ ์ ์ํํ๋ ๋ฐ ํ์ํ ๋ฉ์๋๋ค์ด ๋น ์ง์์ด ๊ตฌํ๋ ์ ์๋๋ก ํฉ๋๋ค.
3. ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ
ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํด๋์ค์์ ๋์ผํ ํ๋กํ ์ฝ์ ์ฑํํ์ฌ, ์ค๋ณต๋ ์ฝ๋๋ฅผ ์ค์ด๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ๋์ผํ ๋์์ ๋ค์ํ ํด๋์ค์ ๊ฑธ์ณ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
4. ๊ฐ์ฒด ๊ฐ ์์กด์ฑ ๊ฐ์
ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ๊ฐ์ ๊ฐํ ์์กด์ฑ์ ํผํ ์ ์์ต๋๋ค. ๊ฐ์ฒด๋ ํน์ ํ๋กํ ์ฝ์ ์ฑํํ ๋ค๋ฅธ ๊ฐ์ฒด์๋ง ์ํธ์์ฉํ๋ฏ๋ก, ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋๋ค. ์ด๋ ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ณ , ๊ฐ์ฒด ๊ต์ฒด๋ ๋ณ๊ฒฝ์ด ์ฉ์ดํด์ง๋๋ค.
5. ์ธํฐํ์ด์ค์ ๋ถ๋ฆฌ
ํ๋กํ ์ฝ์ ํตํด ํน์ ์ญํ ์ ํ์ํ ๋ฉ์๋๋ง ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ผ ์ฑ ์ ์์น(Single Responsibility Principle)์ ์งํค๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ฐ์ฒด๋ ์ฌ๋ฌ ํ๋กํ ์ฝ์ ์ฑํํ์ฌ ๊ฐ๊ฐ์ ์ญํ ์ ์ํํ ์ ์์ผ๋ฉฐ, ๋ถํ์ํ ๊ธฐ๋ฅ์ ํฌํจํ์ง ์๋๋ก ํฉ๋๋ค.
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
class SpecificDelegateClass {
func didPerformAction() {
print("Action performed")
}
}
class MyClass {
var delegate: SpecificDelegateClass?
func performAction() {
delegate?.didPerformAction()
}
}
๋ง์ฝ ํ๋กํ ์ฝ ์์ด ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ๊ตฌํํ๋ ค๋ฉด, ํน์ ํด๋์ค ํ์ ์ ์ง์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋์ด๊ณ , ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋จ์ด๋จ๋ฆฝ๋๋ค.
์ด ๊ฒฝ์ฐ, MyClass๋ SpecificDelegateClass์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์์ต๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ํด๋์ค๊ฐ ์ด ์ญํ ์ ์ํํด์ผ ํ๋ค๋ฉด MyClass๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
ํ๋กํ ์ฝ์ ์ฌ์ฉํ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด
protocol MyDelegate: AnyObject {
func didPerformAction()
}
class MyClass {
weak var delegate: MyDelegate?
func performAction() {
delegate?.didPerformAction()
}
}
class DelegateClassA: MyDelegate {
func didPerformAction() {
print("Action performed by DelegateClassA")
}
}
class DelegateClassB: MyDelegate {
func didPerformAction() {
print("Action performed by DelegateClassB")
}
}
let myObject = MyClass()
let delegateA = DelegateClassA()
let delegateB = DelegateClassB()
myObject.delegate = delegateA
myObject.performAction() // "Action performed by DelegateClassA"
myObject.delegate = delegateB
myObject.performAction() // "Action performed by DelegateClassB"
ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด, ์ด๋ค ํด๋์ค๊ฐ ๋ธ๋ฆฌ๊ฒ์ดํธ ์ญํ ์ ์ํํ ์ง์ ๋ํด ์ ์ฐํ๊ฒ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
DelegateClassA์ DelegateClassB๊ฐ ๋ชจ๋ MyDelegate ํ๋กํ ์ฝ์ ์ฑํํ์ฌ ๊ตฌํํ๊ณ ์์ผ๋ฉฐ, MyClass๋ ํน์ ๋ธ๋ฆฌ๊ฒ์ดํธ ํด๋์ค์ ์ข ์๋์ง ์๊ณ ์ ์ฐํ๊ฒ ๋ธ๋ฆฌ๊ฒ์ดํธ ๊ฐ์ฒด๋ฅผ ๊ต์ฒดํ ์ ์์ต๋๋ค.
๐ 3. ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด๊ณผ ํด๋ก์ (Completion Handler) ๋น๊ต
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด๊ณผ ํด๋ก์ ๋ ๊ฐ๊ฐ ํน์ ์์ ์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ํ๊ฑฐ๋ ์๋ฃ ์ ํน์ ๋์์ ์คํํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๋์ ์ฅ๋จ์ ์ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค.
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด
protocol DataFetcherDelegate: AnyObject {
func didFetchData(_ data: Data)
}
class DataFetcher {
weak var delegate: DataFetcherDelegate?
func fetchData() {
// ๋ฐ์ดํฐ ์์ฒญ ์ฝ๋
let data = Data() // ์์ ๋ฐ์ดํฐ
delegate?.didFetchData(data)
}
}
class ViewController: DataFetcherDelegate {
func didFetchData(_ data: Data) {
print("Data received")
}
}
์ฅ์ :
์ฑ ์ ๋ถ๋ฆฌ: ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ญํ ๊ณผ ์ฑ ์์ ๋ช ํํ ๋ถ๋ฆฌํฉ๋๋ค.
์ ์ฐ์ฑ: ํ๋์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ๋ค์ํ ๋์์ ์ํํ ์ ์์ต๋๋ค.
์ฌ์ฌ์ฉ์ฑ: ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๋จ์ :
๋ณต์ก์ฑ ์ฆ๊ฐ: ๋ธ๋ฆฌ๊ฒ์ดํธ ํ๋กํ ์ฝ์ ์ ์ํ๊ณ , ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ ๊ณผ์ ์์ ์ฝ๋๊ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
์ถ์ ์ด๋ ค์: ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ, ํธ์ถ๋๋ ๋ฉ์๋๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
ํด๋ก์ (Completion Handler)
class DataFetcher {
func fetchData(completion: @escaping (Data) -> Void) {
// ๋ฐ์ดํฐ ์์ฒญ ์ฝ๋
let data = Data() // ์์ ๋ฐ์ดํฐ
completion(data)
}
}
class ViewController {
func loadData() {
let dataFetcher = DataFetcher()
dataFetcher.fetchData { data in
print("Data received")
}
}
}
์ฅ์ :
๊ฐ๊ฒฐํจ: ํด๋ก์ ๋ ์ฝ๋ ๋ธ๋ก ์์ฒด๋ก ๋ฐ๋ก ์ ๋ฌํ ์ ์์ด, ๊ฐ๋จํ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
์ฝ๋ ๊ฐ๋ ์ฑ: ์ฝ๋์ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ธฐ๊ฐ ์ฌ์, ํด๋ก์ ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ํฅ์๋ฉ๋๋ค.
์ผํ์ฑ ์์ ์ ์ ํฉ: ํน์ ์์ ์๋ฃ ํ ํ ๋ฒ๋ง ์คํ๋๋ ๋ก์ง์ ์ ํฉํฉ๋๋ค.
๋จ์ :
ํ์ฅ์ฑ ์ ํ: ํด๋ก์ ๋ ์ผํ์ฑ ์์ ์ ์ ํฉํ์ง๋ง, ๋ณต์กํ ๋ก์ง์ด๋ ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ ํ์ฅ์ฑ์ด ๋จ์ด์ง๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ํด๋ก์ ์์ self๋ฅผ ์บก์ฒํ ๋ ๊ฐํ ์ฐธ์กฐ ์ํ์ด ๋ฐ์ํ ์ ์์ด, ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด [weak self]๋ [unowned self]๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๐ Reference
'๐ iOS > Patterns & Arch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Architecture ] MVVM ํจํด (0) | 2024.08.02 |
---|---|
[Design Patterns] ์ต์ ๋ฒ ํจํด (Observer Pattern) (0) | 2024.08.01 |
[ Architecture ] MVC ํจํด (0) | 2024.06.14 |
[Design Patterns] ์ฑ๊ธํค(Singleton) ํจํด (0) | 2024.06.03 |