Untitled

의존성 주입(Dipendency injection)

class A {
    var name: String = "A"
}
class B {
    var name: String = "B"
}
class C {
    var a: A =  A()
    func printName() {
        print(a.name)
    }
}
let c = C()
c.printName()

// C는 A를 의존하고 있음
// A의 'name' 이름을 바꾸면 
// C 함수에서의 변수명도 바꿔줘야됨
protocol D {
    var name: String { get set }
}
class A: D {
    var name: String = "A"
}

class B: D {
    var name: String = "B"
}

class C {
    var a: D
    
    init(a: D) {
        self.a = a
    }
    func printName() {
        print(a.name)
    }
    
}

let c = C(a: A()) // A, B가 들어가도 모두 동작,
c.printName() //A, B

주입 Injection

// 생상저를 통해서 저장 속성을 외부에다 저장한다.
// 인스턴스를 생성할 때 저장속성에 저장하고 싶은 값을 외부에서 할당 해줌(초기화 = 주입)
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

let p1 = Person(name: "문영")

View ↔ Model

서버 Model → 결국 얘는 Entity

→ Number(Struct)

Model(실제 데이터로써 역할을 하는 모델)

→ Date

화면에 보여지기 위한 Model → View용 모델이 필요한거 아닐까 ? → 그래서 ViewModel 탄생

→ String

Entity가 로직에서 취급하는 모델이 되고