ํฐ์คํ ๋ฆฌ ๋ทฐ
๋์์ธ ์์น - ๋ฌ๋ผ์ง๋ ๋ถ๋ถ์ ๋ถ๋ฆฌ, ๋ฌ๋ผ์ง์ง ์๋ ๋ถ๋ถ์ ์บก์ํ ํ๋ค.
๊ตฌํ ์์ฃผ๊ฐ ์๋, ์ธํฐํ์ด์ค ์์ฃผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ ์ ์ง๋ณด์ ํ๊ธฐ๊ฐ ์ฉ์ดํ๋ค.
์ธํฐํ์ด์ค์ ๊ตฌํํด์ผํ ๊ธฐ๋ฅ์ ์ ์ํ๊ณ
ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์ฑํํ๋ class์ ๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค
e.g.
์๋ฅผ ํ๋ก๊ทธ๋๋ฐํ๋ ค๊ณ ํฉ๋๋ค
์๋ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๊ฐ์ง์ ํ๋๋ฐ ๋ ์๋์๊ณ ๋ ์ง ๋ชปํ ์๋ ์์ต๋๋ค.
๋์์ธ ์์น์ ์ ์ฉํ์ฌ ์ธํฐํ์ด์ค ์์ฃผ์ ๊ตฌํ์ ํด๋ณด๊ฒ ์ต๋๋ค.
์ธํฐํ์ด์ค์๋ ๋ ๊ฐ์งํ๋ค๋ Fly ํจ์๊ฐ ์ ์๋์ด์๊ณ (์บก์ํ)
๋ ์์๋ class์ ๋ ์ง ๋ชปํ๋ class๋ก ๋ถ๋ฆฌํ์ฌ ๋ถ๋ฅํฉ๋๋ค
ํด๋น class๋ ๋ชจ๋ Fly๋ผ๋ ํจ์๊ฐ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์์ํฉ๋๋ค
์ด๋ ๊ฒ ์์ฑํ ๊ฒฝ์ฐ
๋๋ ์, ๋ ์ง ๋ชปํ๋ ์ ๋ชจ๋ ๋์ผํ ํ์(flyํจ์)์ ๋ํ์ฌ ์ธํฐํ์ด์ค๋ฅผ ์ฑํํ๊ณ
๊ฐ class์ ๋ง๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ๋ถ๋ฅ๋ ๊ธฐ๋ฅ๊ณผ ์บก์ํ๋ ๊ธฐ๋ฅ์ด
๋ถ๊ธฐ ์ฒ๋ฆฌ๋์ด ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋๋ค.
protocol Fly {
func fly()
}
class Flyable: Fly {
func fly() {
print("๋ ๋ค")
}
}
class Flydisable: Fly {
func fly() {
print("๋ชป๋ ์")
}
}
class Bird {
private var interface: Fly
init(interface: Fly) {
self.interface = interface
}
func setInterface(interface: Fly){
self.interface = interface
}
func birdFly() {
interface.fly()
}
}
์ด๋ ๊ฒ ์์ฑํ๊ณ
import UIKit
class ViewController: UIViewController {
var duck: Bird = Bird(interface: Flyable())
var chicken: Bird = Bird(interface: Flydisable())
override func viewDidLoad() {
super.viewDidLoad()
duck.birdFly() // 1
chicken.birdFly() // 2
}
}
์ฝ๋๋ฅผ ์คํํด ๋ณด๋ฉด
์ด๋ฐ์์ผ๋ก ์ ๋์ค๋ ๋ชจ์ต์ ๋๋ค.
import UIKit
class ViewController: UIViewController {
var duck: Bird = Bird(interface: Flyable())
var chicken: Bird = Bird(interface: Flydisable())
override func viewDidLoad() {
super.viewDidLoad()
duck.birdFly() // 1
duck.setInterface(interface: Flydisable())
duck.birdFly() // 2
chicken.birdFly() // 3
}
}
duck.setInterface ์ฝ๋๋ก ์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฐ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ (D.I. ํจํด)
์ข ๋ ์์ ํ๊ณ ์์กด์ฑ ๋ถ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ์์ ํ ์ ์์ต๋๋ค.
Dependency Injection Pattern ์ด๋
์ธํฐํ์ด์ค๋ฅผ ์ฑํํ์ฌ ์ธ๋ถ์์ ์ธํฐํ์ด์ค ๊ฐ์ ์ฃผ์ ํ์ฌ
์ธํฐํ์ด์ค๋ง ์ฑํํ๊ณ ๊ฐ์ ๊ฐ๊ณ ์์ง ์์ ViewModel์ ๋ด๋ถ ๊ฐ์ ๋ณ๊ฒฝํ๋ ํจํด์ ๋๋ค.
import Foundation
// DI ์ธํฐํ์ด์ค์
๋๋ค. getter์ setter๊ฐ ์๋ intํ ๋ณ์ num์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
protocol DependencyIndependentInterface {
var num : Int { get set }
}
// DI ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ Model ๊ฐ์ฒด ์
๋๋ค. ์์๋ฐ์ num์ 10์ set ํฉ๋๋ค.
class Model: DependencyIndependentInterface {
var num: Int = 10
}
// DI ์ธํฐํ์ด์ค๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ด๋ถ ๋ณ์๋ฅผ ์์ฑํ๋ ๋ทฐ๋ชจ๋ธ ๊ฐ์ฒด ์
๋๋ค.
class ViewModel {
var internalVarialbe: DependencyIndependentInterface
init(withExternalVariable variable: DependencyIndependentInterface){
self.internalVarialbe = variable
}
}
let test01 = ViewModel(withExternalVariable: Model())
print(test01.internalVarialbe.num)
ViewModel test01์ ๋ด๋ถ๊ฐ์ด 10์ผ๋ก ์ถ๋ ฅ๋๋ ๋ชจ์ต
์ด๋ฐ ์์กด์ฑ ๋ถ๋ฆฌ(DI)์ ์บก์ํ ๊ทธ๋ฆฌ๊ณ ์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ตฌํ(์ ๋ตํจํด)์ผ๋ก
์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ, ํ์ฅ์ฑ, ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ์ด ํฅ์๋๊ณ ํ์คํ๋ ์ค๊ณ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ถ๊ฐ๋ก
๋์์ธ ํจํด์ ๋๊ตฌ์ผ๋ฟ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค ์ ์์ผ๋ฉฐ,
๊ฐ ์ํฉ์ ์ ์ ํ ํจํด์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ํฉ๋๋ค
"์์๋ณด๋ค๋ ์กฐํฉ(Composition)์ ์ฌ์ฉํด๋ผ"
์์ ๊ฐ๋ฅ์ฑ์ด ์๋ fly() ํจ์์ ๋ด๋ถ๊น์ง ๊ตฌํํ์ฌ ์์ํ๊ธฐ ๋ณด๋ค๋
๋ ์๋ ๋ ์ง ๋ชปํ ์๋ ์๋ fly()๋ฅผ ์ธํฐํ์ด์ค๋ก ๋ฐ๋ก ๊ตฌ๋ถํ์ฌ,
fly() ํจ์๊ฐ ํฌํจ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฑํํ๋
๋ ์์๋ class์ ๋ ์ง๋ชปํ๋ class๋ฅผ ํ์ํ ๋ถ๋ถ์ ๊ฐ์ ธ๋ค ์ธ์์๋ค (์กฐํฉ)
์ด๋ฐ ์์ ์ ๋ตํจํด์ ์ฌ์ฉํ๋ฉด ์์ ๋ณด๋ค๋ ์กฐํฉ์ ์ฌ์ฉํ๋ค๊ณ ๋ณผ ์ ์๊ฒ ์ต๋๋ค.
- Total
- Today
- Yesterday
- readysay
- swift ๋คํธ์ํฌ ๋ชจ๋ํ
- rag ๊ธฐ๋ฐ llm ์ฑ๋ด
- swift urlcomponent encode
- chatgpt rag llm
- filemanager excel read
- rag llm pdf
- swift network ๊ณตํตํ
- ๊ณต๋ถ ํ์ด๋จธ ์ดํ
- rag ๊ธฐ๋ฐ llm
- swift queryitem encode
- swift urlsession network module
- swift urlsession refactoring
- swift get excel
- ๋ ๋์ธ์ด ์ดํ
- swift ์์ ๊ฐ์ ธ์ค๊ธฐ
- swift urlsession ๊ณตํตํ
- focus timer ์ดํ
- ๋ ๋์ธ์ด
- swift network module
- swift urlsession module
- ์๋์ํํธ ๋ ์ด์ธ์ด
- swift filemanager get excel
- llm pdf rag
- llm csv
- swift excel read
- swift ์๊ฐ
- swift filemanager excel
- swift network refactoring
- swift ์์ ์ฝ๊ธฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |