이른바 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()
    }
}
doctor.assignNurse()
class Carte {}
class Doctor{
  func makeCarte() -> Carte{
    var carte = Carte()
    return carte
  }
}
class Nurse {
    let carte: Carte
    init(_ carte: Carte) {
        self.carte = carte
    }
}
var carte = doctor.makeCarte()
var nurse = Nurse(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
        }
    }
    var folderIndexPath:IndexPath
    var dataSource:DataSource
    init(_ folderIndexPath:IndexPath, _ dataSource:DataSource) {
        self.folderIndexPath = folderIndexPath
        self.dataSource = dataSource
    }
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
    }
    var store:PhotoStore!
이외에도 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.)