이른바 Dependency Injection(의존적 주입)?
7442 단어 DependencyInjectionSwift
1.Dependency Injection(DI)은 무엇입니까?
의존
주사즉
비@hshimo
밖에서 대상자를 받는 셈이다.
2. DI가 편한 이유/쓰고 싶은 이유
* @hshimo
유연성 없음-> 결정타이기 때문에 유연성이 없어 맞춤 제작이 어렵습니다.
테스트하기 어려움-> 외부에서 동작을 동적으로 변경할 수 없기 때문에 테스트하기 어려움
그렇게 말해도 모르겠지?그럼 예를 들어 생각해 봅시다.
3. 예를 들어 고려한다
예를 들어 의사, 간호사, 병력이 있으면 보통 의사들은 병력을 써서 간호사에게 건네주고 환자에게 대처하죠?(DI 후)
그런데 의사가 병력서를 다 써서 간호사에게 던지면 어떻게 될까?간호사는 항상 의사가 환자의 상황을 물어본 후에 병력을 작성해야 한다.(DI 전)
이렇게 되면 간호사의 업무가 늘어나 매우 고생스럽다.그리고 의사가 병력을 수정하려면 간호사가 처음부터 다시 써야 한다.(DI 전)
DI 이전 코드
protocol Carte {}
class Doctor{
func assignNurse() -> Nurse{
var nurse = Nurse()
return nurse
}
}
class Nurse {
let carte: Carte
init() {
carte = Carte()
}
}
main.swiftdoctor.assignNurse()
DI 이후 코드class Carte {}
class Doctor{
func makeCarte() -> Carte{
var carte = Carte()
return carte
}
}
class Nurse {
let carte: Carte
init(_ carte: Carte) {
self.carte = carte
}
}
main.swiftvar carte = doctor.makeCarte()
var nurse = Nurse(carte)
DI 후면 코드에서 Nurse 클래스 init(Carte가 생성되지 않았습니다!)그리고 외부에서 캐럿 대상을 주입하는 것이기 때문에 캐럿이 변경된 경우 누즈의 내용을 고칠 필요가 없어 테스트가 수월하다.
DI가 사용하고 싶은 이유를 간단히 설명하자면.
한 반의 업무가 너무 많아서(반에 의존) 원활한 진행을 위해 업무를 분담해야 한다.간호사는 병력의 내용을 알고 싶지만 만드는 방법을 전혀 모른다.
에이, 예를 들면 코드가 미묘하다??미안합니다.
4. 다양한 곳에서 Dependency Injection 사용
1. Viewcontroller에서 다른 ViewController를 열 때
ViewController.swift
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if getIndexPathForSelectedCell() != nil {
let newView = segue.destination as! DetailViewController
newView.folderIndexPath = getIndexPathForSelectedCell()!
newView.dataSource = self.dataSource
}
}
DetailViewController.swift var folderIndexPath:IndexPath
var dataSource:DataSource
init(_ folderIndexPath:IndexPath, _ dataSource:DataSource) {
self.folderIndexPath = folderIndexPath
self.dataSource = dataSource
}
여기서 DataSource반은 ViewController의 어딘가에 있는 initialize를 통해Detail ViewController를 통과합니다.2. 사전에 AppDelegate에
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
//dependency injection
let rootViewController = window?.rootViewController as! UINavigationController
let photoViewController = rootViewController.topViewController as! PhotoViewController
photoViewController.store = PhotoStore()
return true
}
PhotoViewController.swift var store:PhotoStore!
AppDelegate에서 화면에 나타나는 첫 번째 ViewController를 지정합니다.항상 ViewController가 마음대로 나오지만, 여기에는 PhotoViewController가 표시됩니다.이외에도 PhotoStore급 initialize도 이곳에서 PhotoViewController에 DI(주입)를 진행한다.
참고 자료!
원숭이도 알아!Dependency Injection: 의존성 주입
Dependency Injection in Swift
Reference
이 문제에 관하여(이른바 Dependency Injection(의존적 주입)?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Saayaman/items/1017e5bcd0d3a8766396텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)