디펜던시 인젝션은...
같은 내용을 다양한 객체에 적용시키는것입니다
스위프트에서는 프로토콜
로 구현됩니다
아래의 예시에서는 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()
}
}