Dependency Injection 에 대해서 정리를 해보도록 하겠습니다 .
https://developer.android.com/training/dependency-injection
일단 이 Dependency Injection의 뜻은 '의존성 주입' 이라는 뜻 입니다.
의존성이란 그럼 무엇인지에 대해 설명을 해보자면
일단 예를 들어보도록 하겠습니다 .
Car 라는 클래스가 동작을 하기 위해서는 Engine 이라는 클래스가 필요하다. 만약 Engine 클래스 가 없으면 이 Car 클래스는 동작을 할 수가 없게 된다. 이와 같은 경우 Car 클래스는 Engine 클래스와 의존성 관계가 있다 라고 말을 할 수가 있겠습니다.
하지만 이와 같은 경우는 의존성의 주입이라고 할 수 없습니다.
이유는 저 위의 코드를 보면 알겠지만 의존성의 주입이라 함은 Engine 클래스를 Car 클래스 내부에서 생성하고 사용하는 것이 아니라 Engine를 클래스 외부에서 생성한 다음에 Car 클래스로 가져와 사용하는 것이기 때문입니다 .
그렇기 때문에 위의 코드를 의존성의 주입 형태로 바꾸어서 설명을 하자면 아래의 코드와 같이 바뀌게됩니다.
좀 더 쉽게 이해하기위해서 또 다른 예시로 설명을 해보도록 하겠습니다 .
지금 보는 코드를 쉽게 설명을 해보자면 PartTimer 는 지금 버거킹에서 일을 하는 중 입니다.
근데 맥도날드에서 일을 하는 친구가 한번 대신 알바를 해달라고 요청을 했을 때
PartTimer 라는 애는 위의 코드를 추가해줘야겠죠 .
그런데 만약에 다른 매장의 친구들 1000명이서 한번씩 자기 알바를 한번해달라고 요청이 왔다면 ????
PartTimer 의 코드는 굉장히 많아지고 불필요한 알아보기 힘든 코드가 될 것 입니다.
이번에는 DI를 사용한 경우를 예로 들어보겠습니다.
Interface 를 사용하여서 공통된 추상메서드를 만든 후에 각 매장에( BurgerKing , Mcdonald 등등) 상속 해준다음
PartTimer 는 생성자로 (constructure) 받아서 사용을 하는 것 입니다.
이런식으로 DI 를 활용하여 코드를 만들면 각 매장 별로 필요한 코드들을 따로 분리해서 관리할 수 있기 때문에
나중에 유지보수 측면으로도 더 편하고 테스트성이 높아지며 관리하기도 쉬워질 것 입니다.
DI 정리
DI의 장점
(리팩토링할 때 해당 부분으로가서 리팩토링을 하면되기 때문에)
DI의 단점
DI 라이브러리의 종류
지금까지 DI에 대해서 적어봤습니다!
https://jangstory.tistory.com/48?category=874426
'생각정리' 카테고리의 다른 글
[Android] RxJava에 대해서 (2) | 2022.05.24 |
---|---|
[Android] 객체지향에 대해서 (feat. 절차지향) (0) | 2022.05.20 |
[Android APP Architecture] 안드로이드 아키텍처 (2) | 2022.04.01 |
에이블디(Able.d) 수료 후기 ! (1) | 2021.11.25 |
생명주기에 대하여 (0) | 2021.10.21 |