본문 바로가기
CS/CS

[CS] Dependency Injection

by 리드맥 2022. 1. 13.
  • 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 사용하는이유
    1. 의존성이 줄어든다: 내부가 아닌 외부에서 주입하면 의존대상이 변화하더라도 구현 자체를 수정할 일이 없거나 줄어들게 된다
    2. 재사용성이 높아진다: 의존하고있던 내부코드를 외부로 끄집어 내어서 다른 클래스에서 재사용 할 수 있다
    3. 가독성이 높아진다: 하위 기능이 별도로 분리되어 있어서 가독성이 높다
    4. 테스트하기 좋다: 상위대상과 하위대상을 분리해서 진행 가능하다

'CS > CS' 카테고리의 다른 글

[CS] RESTful API  (0) 2022.03.07
[CS] MVVM 간단하게 메모  (0) 2022.03.02
[CS] 프로토콜, 인터페이스 차이  (0) 2022.01.12
[CS] 함수형 프로그래밍  (0) 2022.01.12
[CS] 모듈, 라이브러리, 프레임워크, API  (0) 2022.01.12

댓글