Dependency Injection 의존성주입

jane·2021년 12월 26일
1

iOS

목록 보기
11/32

의존성 주입이 대체 무엇이냐
용어를 보면 굉장히 어려울 것 같아서 무섭다...
근데 알고보면 별것이 아님

일단
의존성이 생긴다는 말과 의존성을 주입한다는 말은 동일한 말이 아니다
객체간의 의존성을 줄이기 위해 의존성을 주입한다고 말해야 맞는 듯 ,,

다시 설명하자면
일단 어떤 클래스에서 다른 클래스를 사용하는 경우 '의존성'이 생긴다고 한다.

그러나 의존성이 생기는 것 중에서도 클래스간의 의존성을 줄이기 위하여 내부에서 객체를 생성하여 사용하지 않고, 외부에서 객체를 생성해서 넣어주는 방법을 바로 의존성 주입이라고 한다.

그럼 의존성 주입을 왜 하냐??
의존성 주입의 장점

  • Unit Test가 쉬워짐
  • 코드의 재사용성 높아짐
  • 객체간의 의존성 줄이거나 없앨 수 있음 -> 유지보수 great
  • 객체간의 결합도를 줄여서 유연한 코드를 만들수 있음

단점

  • 코드를 처음보는 사람이 이해하기 어려움

A 클래스가 B 클래스에 의존성이 생기는 경우

(굵은 글씨가 의존성 주입)
1. B 클래스를 싱글턴으로 사용
2. 프로퍼티로 B 클래스를 가지고 있는 방식

  • A 클래스가 B 클래스를 직접 생성
  • A 클래스의 이니셜라이저에서 참조를 전달받는 방식
  • A 클래스 초기화 이후 외부에서 속성에 접근하여 전달

3. 메서드의 전달인자로 참조를 전달받는 방식

자세한 설명

  1. B 클래스를 싱글턴으로 사용
    A 클래스에서 B 클래스의 기능을 사용하기위한 가장 쉬운 방법은 그 클래스를 싱글턴으로 만들어서 언제든지 부르는 것이다. 하지만 이는 A 클래스의 기능을 테스트하기 위해서는 B가 반드시 필요하기때문에 testable하지 않다.

  2. 프로퍼티로 B 클래스를 가지고 있는 방식
    프로퍼티 기본값으로 A클래스가 B클래스를 직접 가지고있거나, 이니셜라이저에서 B클래스를 받아 초기화하거나, A 클래스 초기화 이후에 A 의 프로퍼티에 할당하는 방법으로 가질 수 있다.

1) A 클래스가 B 클래스를 직접 생성: 프로퍼티 기본값
2) A 클래스의 이니셜라이저에서 참조를 전달받는 방식
3) A 클래스 초기화 이후 외부에서 속성에 접근하여 전달

여기서 2),3)번의 경우가 의존성 주입이라고 할 수 있겠다.

Reference
[iOS] Dependency Injection (의존성 주입) 이란?
iOS 의존성 주입(Dependency Injection) 알아보기
DI(Dependency Injection)에 대해 알아보자

profile
제가 나중에 다시 보려고 기록합니다 ✏️

0개의 댓글