Dependency(์์กด์ฑ)
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ Dependency, ์์กด์ฑ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด ์ฌ์ด์ ์์กด ๊ด๊ณ๊ฐ ์๋ค๋ ๊ฒ์ ๋งํ๋ค. ์ฆ, ์์กดํ๋ ๊ฐ์ฒด๊ฐ ์์ ๋๋ฉด, ๋ค๋ฅธ ๊ฐ์ฒด๋ ์ํฅ์ ๋ฐ๋๋ค๋ ๊ฒ์ด๋ค.
import UIKit
struct Eat {
func coffee() {
print("์๋ฉ๋ฆฌ์นด๋
ธ")
}
func meal() {
print("ํผ์")
}
}
struct Person {
var todayEat: Eat
func coffee() {
todayEat.coffee()
}
func meal() {
todayEat.meal()
}
}
Person๊ฐ์ฒด๋ Eat๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค๋ก ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก, Eat๊ฐ์ฒด์ ์์กด์ฑ์ด ์๊ธด๋ค.
์ฆ, Person๊ฐ์ฒด๋ Eat๊ฐ์ฒด์ ์์กดํ๊ณ ์๋ค.
๋ง์ฝ ์ด๋, Eat๊ฐ์ฒด์ ์ค์ํ ์์ ์ด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด, Person๊ฐ์ฒด๋ ์ํฅ์ ๋ฐ์ ์ ์๋ค.
์์กด์ฑ์ ๊ฐ์ง๋ ์ฝ๋๊ฐ ๋ง์์ง๋ค๋ฉด, ์ฌํ์ฉ์ฑ์ด ๋จ์ด์ง๊ณ ๋งค๋ฒ ์์กด์ฑ์ ๊ฐ์ง๋ ๊ฐ์ฒด๋ค์ ํจ๊ป ์์ ํด ์ฃผ์ด์ผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฌํ ์์กด์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ๊ฐ๋ ์ด ๋ฐ๋ก Dependency Injection, ์์กด์ฑ ์ฃผ์ ์ด๋ค.
Injection(์ฃผ์ )
Injection, ์ฃผ์ ์ ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ฃ๋ ๊ฒ์ ๋งํ๋ค.
class Eat: Menu {
var coffee: String
var meal: String
init(coffee: String, meal: String) {
self.coffee = coffee
self.meal = meal
}
func printCoffee() {
print("์๋ฉ๋ฆฌ์นด๋
ธ")
}
func printMeal() {
print("ํผ์")
}
}
let menu = Eat(coffee: "์๋ฉ๋ฆฌ์นด๋
ธ", meal: "ํผ์")
์์ ์ฝ๋์ฒ๋ผ ์์ฑ์๋ฅผ ํ์ฉํด์ ์ฃผ์ ํ ์ ์๋ค.
Dependency Injection
๋ด๋ถ์์ ๋ง๋ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์ ๋ฃ์ด์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๊ฒ
์์กด์ฑ ์ฃผ์ ์ ํ๋ ์ด์ ๋ ๋ญ๊น?
- Unit Test๊ฐ ์ฉ์ดํด์ง๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
- ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ ์ค์ด๊ฑฐ๋ ์์จ ์ ์๋ค.
- ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ฉด์ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
Denpendency Inversion Principle (์์กด์ฑ ์ญ์ ์์น)
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ์ SOLID ์์น ์ค ํ๋๋ก,
๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์๋๊ณ , ์ถ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์์กดํด์ผ ํ๋ค๋ ์์น
์ ๋งํ๋ค.
Swift์์ ์ถ์ํ๋ ์ธํฐํ์ด์ค๋ก Protocol์ ์ฌ์ฉํ๋ค.
์ด Protocol์ ์ด์ฉํด ์์กด์ฑ ์ฃผ์ ์ ๊ตฌํํ๋ค.
protocol Menu {
func printCoffee()
func printMeal()
}
class Eat: Menu {
var coffee: String
var meal: String
init(coffee: String, meal: String) {
self.coffee = coffee
self.meal = meal
}
func printCoffee() {
print("์๋ฉ๋ฆฌ์นด๋
ธ")
}
func printMeal() {
print("ํผ์")
}
}
struct Person {
var todayEat: Menu
func printCoffee() {
todayEat.printCoffee()
}
func printMeal() {
todayEat.printMeal()
}
mutating func changeMenu(menu: Menu) {
self.todayEat = menu
}
}
์ด๋ ๊ฒ Protocol์ ํตํด ์์กด์ฑ์ ์ฃผ์ ํ๋ฉด
Eat๊ฐ์ฒด์ Person๊ฐ์ฒด๋ ์๋ก ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๊ฐ ๋๋ค.
Eat๊ฐ์ฒด๋ฅผ ์์ ํ๊ฑฐ๋ Person์ ์์ ํ๋ค๊ณ ํด์ ์๋ ๊ฐ์ฒด๋ฅผ ํจ๊ป ์์ ํด์ผํ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
'๐ iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
UI๋ฅผ ๋ฉ์ธ์ค๋ ๋์์ ๊ตฌํํด์ผํ๋ ์ด์ (1) | 2024.11.04 |
---|---|
Photos ํ๋ ์์ํฌ (0) | 2024.08.07 |
Photos ํ๋ ์์ํฌ ๊ณต์๋ฌธ์ ๋ฒ์ญ (0) | 2024.08.07 |
Class๋ฉ์๋์ Static๋ฉ์๋ (0) | 2023.06.08 |
Swinject๋ฅผ ์ฌ์ฉํ iOS ์์กด์ฑ ์ฃผ์ (0) | 2023.05.09 |