본문 바로가기

생각정리

[Android] Dependency Injection. DI 에 대해서

728x90

Dependency Injection 에 대해서 정리를 해보도록 하겠습니다 .

 

https://developer.android.com/training/dependency-injection

 

Android의 종속 항목 삽입  |  Android 개발자  |  Android Developers

Android의 종속 항목 삽입 종속 항목 삽입(DI)은 프로그래밍에 널리 사용되는 기법으로, Android 개발에 적합합니다. DI의 원칙을 따르면 훌륭한 앱 아키텍처를 위한 토대를 마련할 수 있습니다. 종속

developer.android.com

 

 

일단 이 Dependency Injection의 뜻은 '의존성 주입' 이라는 뜻 입니다.

의존성이란 그럼 무엇인지에 대해 설명을 해보자면 

 

일단 예를 들어보도록 하겠습니다 .

 

의존성 주입 X

 

Car 라는 클래스가 동작을 하기 위해서는 Engine 이라는 클래스가 필요하다. 만약 Engine 클래스 가 없으면 이 Car 클래스는 동작을 할 수가 없게 된다. 이와 같은 경우 Car 클래스는 Engine 클래스와 의존성 관계가 있다 라고 말을 할 수가 있겠습니다. 

 

하지만 이와 같은 경우는 의존성의 주입이라고 할 수 없습니다.

이유는 저 위의 코드를 보면 알겠지만 의존성의 주입이라 함은 Engine 클래스를 Car 클래스 내부에서 생성하고 사용하는 것이 아니라 Engine 클래스 외부에서 생성한 다음에 Car 클래스로 가져와 사용하는 것이기 때문입니다 .

그렇기 때문에 위의 코드를 의존성의 주입 형태로 바꾸어서 설명을 하자면 아래의 코드와 같이 바뀌게됩니다. 

 

의존성 주입 O

 

 

 

좀 더 쉽게 이해하기위해서 또 다른 예시로 설명을 해보도록 하겠습니다 .

 

지금 보는 코드를 쉽게 설명을 해보자면 PartTimer 는 지금 버거킹에서 일을 하는 중 입니다.  

 

근데 맥도날드에서 일을 하는 친구가 한번 대신 알바를 해달라고 요청을 했을 때 

 

PartTimer 라는 애는 위의 코드를 추가해줘야겠죠 . 

그런데 만약에 다른 매장의 친구들 1000명이서 한번씩 자기 알바를 한번해달라고 요청이 왔다면 ????

PartTimer 의 코드는 굉장히 많아지고 불필요한 알아보기 힘든 코드가 될 것 입니다.

 

 

 

이번에는 DI를 사용한 경우를 예로 들어보겠습니다. 

 

 

Interface 를 사용하여서 공통된 추상메서드를 만든 후에 각 매장에( BurgerKing , Mcdonald 등등) 상속 해준다음

PartTimer 는 생성자로 (constructure) 받아서 사용을 하는 것 입니다. 

 

최종적으로 사용한 예

 

이런식으로 DI 를 활용하여 코드를 만들면 각 매장 별로 필요한 코드들을 따로 분리해서 관리할 수 있기 때문에 

나중에 유지보수 측면으로도 더 편하고 테스트성이 높아지며 관리하기도 쉬워질 것 입니다. 

 

 

 DI 정리

•Dependency injection (의존성 주입)은 위에서 설명한 객체끼리의 의존성을 줄이거나 없앨 수 있는 디자인 패턴이다.
일반적으로   하나가 다른 하나를 어떤 용도를 위해 사용함.
코드에서 모듈 간의 연결의 의미 (객체지향언어에서는  클래스 간의 관계라고도 말함).
•생성이 아닌 주입! 

 

 

DI의 장점

Unit Test가 용이해짐.  (코드들을 따로 따로 분리해놓기 때문)
객체 간의 의존성을 줄이거나 없애고 유연한 코드를 작성할 수 있음  리팩토링이 수월함. 

  (리팩토링할 때 해당 부분으로가서 리팩토링을 하면되기 때문에) 

코드의 재사용성을 높여준다 (보일러 플레이트(반복되는) 코드 감소).
스코프를 이용한 객체 관리.

 

DI의 단점 

의존성 주입을 위한 선행작업이 필요하며 (코드 분리) 
코드를 추적하고 읽기가 어려워짐 (길어짐).

 

 

DI 라이브러리의 종류 

Koin  - 순수 코틀린만으로 작성된 코틀린을 위한 라이브러리
Dagger2 -Dagger2 자바와 안드로이드를 위해 만들어진  의존성주입 프레임워크
Hilt - Dagger 기반이지만 Dagger 보다 쉬운 기본 설정 ,  안드로이 클래스 최적화,  Life Cycle 관리 

 

 

 

지금까지 DI에 대해서 적어봤습니다! 

 

 

 

https://jangstory.tistory.com/48?category=874426 

 

[Android/Kotlin] Hilt 사용하기 !

아주 간단하게 hilt를 사용해서 앱 구현을 해보도록 하겠습니다. 준비 https://developer.android.com/training/dependency-injection/hilt-android?hl=ko Hilt를 사용한 종속 항목 삽입  | Android 개발자  | A..

jangstory.tistory.com