🍎 Apple/Swift

[Swift] DI(Dependency Injection) μ˜μ‘΄μ„± μ£Όμž… - ν”„λ‘œν† μ½œ

JINiOS 2023. 12. 30. 15:48
728x90

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에 λŒ€ν•΄ μ‘°κΈˆμ€ κ°„λ‹¨ν•˜κ²Œ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€!

λ‚˜μ€‘μ— ν”„λ‘œμ νŠΈμ—μ„œ κ΅¬ν˜„ν•΄λ³΄κ³  μ•Œμ•„λ³Έ λ’€ λ”μš± μˆ˜μ •ν•΄λ³΄κ² μ”λ‹ˆλ‹€-!

728x90