본문 바로가기

Android

Dependency Injection : 의존성 주입

728x90

1. DI(의존성 주입)

DI를 그대로 번역한 의존성 주입이란 용어를 사용해 "무슨 뜻이야?"라는 생각이 듭니다. 찬찬히 알아보겠습니다. 

우선 의존성 주입(DI)의 개념은 "하나의 객체에 다른 객체의 의존성을 제공하는 기술"을 말합니다.

"객체 지향에서 두 클래스 간의 관계"를 의미하는 의존성과 "생성자 또는 메서드 등을 통해 외부로부터 생성된 객체를 받는 것"이 주입이 합쳐진 것이죠.

2. DI의 장점

  1. 의존성 주입은 인터페이스를 기반으로 설계되어, 코드가 유연
  2. 주입하는 코드만 따로 변경하기 쉬워 리팩토링이 수월
  3. 의존성 주입으로 인해 stub, mock 객체를 사용해 유닛 테스트의 이점 (가장 큰 장점)
  4. 클래스 간의 결합도를 줄일 수 있음
  5. 인터페이스를 기반으로 설계해, 개발자로 하여금 서로 사용하는 클래스를 독립적으로 개발이 가능

3. DI의 단점

  1. 간단한 프로그램을 만들 땐 번거로움
  2. 의존성 주입은 동작, 구성을 분리하기 때문에 코드 추적이 어렵고, 가독성을 떨어뜨릴 수 있음
  3. Dagger2, Koin 등의 의존성 주입 프레임워크는 compile time 중 어노테이션 프로세서를 이용해 파일을 생성하기 때문에 빌드 시간 늘어난다

 

짧은 기간 개발 후, 유지보수가 필요없는 간단한 프로그램에 의존성 주입을 사용하여 굳이 인터페이스 기반으로 설계하고, 의존성 주입 프레임워크의 설정 등으로 인한 생산성을 저하시킬 필요가 없지만, 

상용 애플리케이션을 개발하고, 지속적인 유지보수를 할 것이라면, 의존성 주입으로 인해 생산성이 더욱 향상되기 때문에 추천됩니다.

 

처음 의존성 주입을 접하고, 적용하고, 이해하는 것이 쉽지않겠지만, Dagger2, Koin 등의 프레임워크를 통해 얻게되는 이점이 크다고 느껴져 꼭 익혀두어야 할 것 같습니다.

 

 

지금까지 의존성 주입에 대해 알아보았고, 다음엔 Dagger2가 무엇인지 공부하겠습니다.