DI 의존성 주입이란?
하나의 객체가 다른 객체의 의존성을 제공하는 기술. 외부에서 의존 객체를 생성하여 넘겨주는 기법을 의미한다.
일반적인 객체 생성은 클래스 안에서 사용할 객체를 생성하지만, DI는 외부에서 객체를 주입 받는 방식이다.
의존성이란?
class A {
private Test test;
fun Foo() { this.test = new Test() }
fun Boo() { this.test.do() }
}
클래스 A
의 Boo()
함수를 호출하기 위해서는 Test 클래스가 필수적이다.
→ A는 Test 클래스에 의존성을 가진다.
의존성이 생겨나면 코드의 재활용성이 떨어지고,
결합도가 높아져 하나의 클래스를 수정하였을 때의 영향력이 커진다.
💡 의존성은 함수에 필요한 클래스 또는 참조변수에 의존하는 것
의존성 주입의 장점
- Unit Test 가 쉬워진다
- 코드의 재활용성을 높힌다
- 리팩토링 편의성이 높아진다
- 객체 간의 의존성을 설정하여 제한
- 보일러 플레이트 제거
- 유연한 아키텍처를 생성한다
class A {
private Test test;
fun Foo(Test test) { this.test = test }
fun Boo() { this.test.do() }
}
함수 Foo
의 경우 호출 시 직접 Test 객체를 넣어 부를 수 있으므로 객체간의 의존성을 줄인다고 볼 수 있다.
의존성 주입의 단점
- 의존성 주입을 위한 선행 작업에 리소스가 든다
- 코드를 추적하고 읽기가 힘들어짐
왜 DI를 사용하는가? 예시
- 예로 테스팅을 위해 가상의 repository 구현체를 넘겨줄 수 있어야한다.
안드로이드에서의 DI
안드로이드에서는 두 가지 방식의 DI가 가능하다.
생성자 주입 Constructor Injection
: 생성자를 통해 의존하는 객체를 전달
필드 주입 Field Injection
: 객체가 초기화 된 후에 의존하는 객체를 전달
여러가지 라이브러리 등이 지원된다.
koin, Dagger, Hilt 등
참고
'Android > Study' 카테고리의 다른 글
💡 안드로이드에서 MVVM 패턴이란? (0) | 2022.08.20 |
---|---|
🏛 클린 아키텍처 in 안드로이드 (Clean Architecture) (0) | 2022.08.20 |
📥 단방향 데이터 플로우 Undirectional Data Flow (UDF) 패턴 (0) | 2022.08.20 |
💡 Kotlin 코틀린 : DataClass 란? (0) | 2022.08.20 |
💡 Kotlin 코틀린 : SealedClass 란? (0) | 2022.08.20 |