dependency injection

인생노잼시기·2021년 10월 7일
0

디펜던시 인젝션은...
같은 내용을 다양한 객체에 적용시키는것입니다

스위프트에서는 프로토콜로 구현됩니다

아래의 예시에서는 Driving이라는 프로토콜을 BMW와 Hyundai가 상속받아 구현한 후 차의 종류에 상관없이 객체를 생성할 수 있게 되었습니다.

import Foundation

protocol Driving {
    func startDriving()
    func isDriving() -> Bool
    func stopDriving()
}

class BMW: Driving {
    func startDriving() {
        
    }
    
    func isDriving() -> Bool {
        return true
    }
    
    func stopDriving() {

    }
}
class Hyundai: Driving {
    func startDriving() {
        
    }
    
    func isDriving() -> Bool {
        return true
    }
    
    func stopDriving() {
        
    }
}

//class SelectedCar {
//
//    let car: Hyundai
//
//    init(car: BMW) {
//        self.car = car
//    }
//}

class SelectedCar {
    let car: Driving
    init(car: Driving) {
        self.car = car
    }
}

let selection1 = SelectedCar(car: BMW())
let selection2 = SelectedCar(car: Hyundai())

이메일계정이라는 프로토콜을 따르면서
각각 다른 이메일 계정을 생성할 때 사용하는 예시

import Foundation

var data = [EmailAccount]()
data = model()

print(data.count)       //2
print(data[0].domain)   //gmail.com

func model() -> [EmailAccount] {
    return [Gmail(), Yahoo()]
}

protocol EmailAccount {
    var username: String { get }
    var domain: String { get }
    var lastEamilReceived: Date { get }
}

class Gmail: EmailAccount {
    var username: String {
        return "john"
    }
    
    var domain: String {
        return "gmail.com"
    }
    
    var lastEamilReceived: Date {
        return Date()
    }
    
    
}

class Yahoo: EmailAccount {
    var username: String {
        return "nanno"
    }
    
    var domain: String {
        return "yahoo.com"
    }
    
    var lastEamilReceived: Date {
        return Date()
    }
    
    
}
profile
인생노잼

0개의 댓글