DI(의존성 주입)

작성일

DI(의존성 주입)

  • 1.생성자 메서드로 찔러 넣기
  • 2.멤버변수에 직접 찔러 넣기
// sayHi를 강제로 토크하는 프로토콜
protocol Talk {
    func sayHi()
}

//베프, 올드프렌드 토크클래스들은 토크 프로토콜을 임플리먼트 하기 때문에 sayHi 메소드 정의가 강제됨
class BestFriendTalk: Talk {
    func sayHi() {
        print("오늘도 git에 올리는중?!")
    }
}
class OldFriendTalk: Talk {
    func sayHi() {
        print("꾸준하네~")
    }
}

//친구 클래스
class Frined{
    //멤버변수로서 토크를 가진다.
    //외부에서도 주입이 가능하도록 프라이빗으로 안한다.
    var talk: Talk?
    init(){}
    //생성자 메소드를 통해 토크 주입 가능
    init(talk: Talk) {
        self.talk = talk
    }
    //의존성 주입이 완료된? 토크로 말한다
    func sayHello(){
        talk?.sayHi()
    }
    // 의존성 주입 메소드
    func setTalk(talk: Talk) {
        self.talk = talk
    }
}
  • 첫번째 방법.

친구 인스턴스 생성시에 토크를 주입시킴

let bfTalk = BestFriendTalk()
let myBestFriend = Frined(talk: bfTalk)
myBestFriend.sayHello()

출력

오늘도 git에 올리는중?!
  • 두번째 방법.

친구 인스턴스를 만들고 멤버 변수에 찔러넣어서 주입함

let myOldFriendTalk = OldFriendTalk()
let myOldFrined = Frined()
myOldFrined.talk = myOldFriendTalk
myOldFrined.sayHello()

출력

꾸준하네~