- Dependency: 어떤 객체 안에 그객체가 들어있어서 그 객체를 사용하고 있기 때문에 의존성이 생긴다
class A {
var name = "lee"
}
class B {
var b = A()
}
lat na = B()
print(na.b.name)
- Injection: 주입, 이니셜라이제이션 내부가 아닌, 외부에서 객체를 생성해서 넣어주는것
class A{
var name:String?
init(name: String){
self.name = name
}
}
class B {
var b = A(name:"lee") //내부에서 객체생성 의존성이 높아짐
}
let a = A(name:"lee")// 외부에서 객체생성
- 위 두개 코드를 합치면 의존성 주입: 객체간 결합을 느슨하게 만든다. 좀더 변경이 유연해지고 재사용이 가능한 코드가 된다
class A {
var name = "lee"
}
class B {
var b:A
init(b:A){
self.b = b
}
}
lat na = B(b:A()) //외부에서 객체생성해서 주입: 의존성이 낮아짐
print(na.b.name)
- 추상화: 프로토콜로 의존관계를 추상화 하면 더다양한 의존관계를 맺을 수 있고 의존관계가 느슨해져서 결합도가 낮아진다
- Dependency injection: 객체가 의존하는 또다른 객체를 외부에서 선언하고 주입받아서 사용
- Dependency injection 사용하는이유
- 의존성이 줄어든다: 내부가 아닌 외부에서 주입하면 의존대상이 변화하더라도 구현 자체를 수정할 일이 없거나 줄어들게 된다
- 재사용성이 높아진다: 의존하고있던 내부코드를 외부로 끄집어 내어서 다른 클래스에서 재사용 할 수 있다
- 가독성이 높아진다: 하위 기능이 별도로 분리되어 있어서 가독성이 높다
- 테스트하기 좋다: 상위대상과 하위대상을 분리해서 진행 가능하다
댓글