Swiftμμλ μμ‘΄μ± μ£Όμ (Dependency Injection)μ μν΄ λ€μν λ°©λ²μ μ¬μ©ν μ μμ΅λλ€.
κ·Έ μ€ λνμ μΈ λ°©λ² μ€ νλμΈ νλ‘ν μ½μ μ¬μ©ν μμ‘΄μ± μ£Όμ μ λν΄ μμμ ν¨κ» μμλ΄ μλ€.
κ³μ°κΈ°λ₯Ό λ§λλ μ ν리μΌμ΄μ μ κ°λ°νλ€κ³ κ°μ ν΄λ΄ μλ€.
μ«μλ₯Ό μ λ ₯λ°κ³ , μ¬μΉμ°μ°μ μννλ κΈ°λ₯μ΄ νμνκ² μ£ ?
μ΄λ, μ«μλ₯Ό μ λ ₯λ°λ κΈ°λ₯κ³Ό μ¬μΉμ°μ°μ μννλ κΈ°λ₯μ κ°κ° λ³λμ ν΄λμ€λ‘ λΆλ¦¬νκ³ , μ΄ ν΄λμ€λ€μ΄ μλ‘ μμ‘΄νμ§ μλλ‘ νλ κ²μ΄ μ’λ€κ³ ν©λλ€. μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ΄ ν₯μλκ³ , ν μ€νΈλ λμ± μ¬μμ§κΈ° λλ¬Έμ΄μ£ !
μ΄λ₯Ό μν΄, μ°λ¦¬λ λ€μκ³Ό κ°μ νλ‘ν μ½μ μ μν μ μμ΅λλ€.
protocol NumberInput {
func getNumber() -> Int
}
protocol Calculator {
func add(num1: Int, num2: Int) -> Int
func subtract(num1: Int, num2: Int) -> Int
func multiply(num1: Int, num2: Int) -> Int
func divide(num1: Int, num2: Int) -> Double
}
μμ νλ‘ν μ½μ ꡬννλ ν΄λμ€λ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€.
class UserInput: NumberInput {
func getNumber() -> Int {
// μ«μλ₯Ό μ
λ ₯λ°λ μ½λ
}
}
class BasicCalculator: Calculator {
func add(num1: Int, num2: Int) -> Int {
return num1 + num2
}
func subtract(num1: Int, num2: Int) -> Int {
return num1 - num2
}
func multiply(num1: Int, num2: Int) -> Int {
return num1 * num2
}
func divide(num1: Int, num2: Int) -> Double {
return Double(num1) / Double(num2)
}
}
μμ μμμμλ UserInput ν΄λμ€κ° NumberInput νλ‘ν μ½μ ꡬννκ³ , BasicCalculator ν΄λμ€κ° Calculator νλ‘ν μ½μ ꡬννκ³ μμ΅λλ€.
μ΄ ν΄λμ€λ€μ μ¬μ©νμ¬ κ³μ°κΈ°λ₯Ό ꡬνν μ μλλ°μ. μ΄λ, μμ‘΄μ±μ μ£Όμ νλ λ°©λ²μΌλ‘ νλ‘ν μ½μ μ¬μ©ν μ μμ΅λλ€.
class CalculatorApp {
let numberInput: NumberInput
let calculator: Calculator
init(numberInput: NumberInput, calculator: Calculator) {
self.numberInput = numberInput
self.calculator = calculator
}
func calculate() {
let num1 = numberInput.getNumber()
let num2 = numberInput.getNumber()
let result = calculator.add(num1: num1, num2: num2)
print("κ²°κ³Ό: \(result)")
}
}
let calculatorApp = CalculatorApp(numberInput: UserInput(), calculator: BasicCalculator())
calculatorApp.calculate()
μμ μμμμλ CalculatorApp ν΄λμ€μ λ΄λΆμμ NumberInputκ³Ό Calculator νλ‘ν μ½μ μ¬μ©νμ¬ μμ‘΄μ±μ μΆμννκ³ , CalculatorApp ν΄λμ€μ μμ±μμμ UserInputκ³Ό BasicCalculator ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μΈμλ‘ μ λ¬νμ¬ μμ‘΄μ±μ ꡬ체ννκ³ μμ΅λλ€.
μ΄λ‘μ¨ CalculatorApp ν΄λμ€λ UserInputκ³Ό BasicCalculator ν΄λμ€μ μμ‘΄νμ§ μκ³ , λ 립μ μΌλ‘ λμν μ μμ΅λλ€.
μ΄λ κ² νλ‘ν μ½μ μ¬μ©νμ¬ μμ‘΄μ±μ μ£Όμ νλ©΄, μ½λμ μ μ°μ±κ³Ό νμ₯μ±μ΄ ν₯μλ©λλ€.
μ΄λ₯Ό νμ©νλ€λ©΄ λ€λ₯Έ μ’ λ₯μ μ λ ₯ ν΄λμ€λ κ³μ°κΈ° ν΄λμ€λ₯Ό μΆκ°λ‘ ꡬννμ¬ μ¬μ©ν μ μκ² μ£ ?
DIμ λν΄ μ‘°κΈμ κ°λ¨νκ² μμ보μμ΅λλ€!
λμ€μ νλ‘μ νΈμμ ꡬνν΄λ³΄κ³ μμλ³Έ λ€ λμ± μμ ν΄λ³΄κ² μλλ€-!
'π Apple > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] DEBUG, RELEASE λΆκΈ° μ²λ¦¬ν κ±°μμ (Swift Compiler, μ μ²λ¦¬λ¬Έ, #if DEBUG) (0) | 2024.01.13 |
---|---|
[Swift] mutating | νλ‘νΌν°μ λ³νκ° μμ κ±°μΌ! (0) | 2024.01.10 |
[Swift] Result νμ (0) | 2023.12.26 |
[Swift] dropFirst()μ removeFirst()μ μ°¨μ΄ (0) | 2023.09.01 |
[Swift] Property Wrapper (0) | 2023.04.23 |