최근 회사에서 진행하는 프로젝트에서 클린 아키텍처로 진행을 하고 있다. 그러면서 자연스럽게 DI를 적용하고 있는데 이번에 DI에 대해서 DI를 쓰는 이유와 그 장점에 대해서 자세히 정리하려고 한다.
DI(의존성 주입) 이란?
DI(Dependency Injection)는 의존성 주입이라는 뜻으로, 객체 지향 프로그래밍에서 발생하는 객체 간 의존 관계를 효과적으로 관리하기 위한 방법 중 하나이다.
우리는 이런 DI를 왜 사용해야 할까?
DI의 장점
1. 코드 재사용성 향상
DI를 사용하면 객체 간의 의존 관계를 직접 관리하지 않고, 외부에서 주입받기 때문에 객체의 재사용성이 향상된다. 또한 의존성을 주입하는 코드는 모듈화가 용이하며, 다른 클래스에서도 동일한 방식으로 의존성을 주입할 수 있다.
2. 유연성과 확장성
DI를 사용하면 객체 간의 의존 관계를 느슨하게 만들 수 있습니다. 이는 유연한 앱 아키텍처를 만들어준다. 또한, 새로운 기능을 추가하거나 변경할 때 의존성을 주입하는 코드만 수정하면 되기 때문에 확장성도 높아진다.
3. 테스트 용이성
DI를 사용하면 객체 간의 의존 관계를 외부에서 주입하기 때문에 테스트하기 용이해진다. 의존성이 있는 클래스를 테스트할 때, 테스트용 모의 객체(Mock Object)를 사용하여 의존성을 주입할 수 있다. 이를 통해, 테스트의 격리성을 보장하면서도 효율적으로 테스트할 수 있다.
4. 모듈화
DI를 사용하면 앱을 여러 모듈로 나누어 개발할 수 있다. 이는 앱을 팀 단위로 나누어 작업할 때, 각 모듈의 독립성을 보장하면서도 모듈 간의 의존성을 관리할 수 있다. 또한, 모듈별로 의존성을 주입하는 코드를 분리하여 코드의 가독성을 높일 수 있다.
안드로이드의 DI 프레임워크
1. Dagger2
Dagger 2는 Google에서 만든 DI 프레임워크로, 안드로이드에서 가장 널리 사용되는 프레임워크 중 하나이다. Dagger 2는 컴파일 시간에 의존성을 생성하며, 자바 어노테이션 프로세서를 사용한다. 이를 통해 DI를 구현하는 코드를 직접 작성할 필요 없이, 코드의 가독성과 유지보수성이 높아진다.
2. Hilt
Hilt는 Google에서 만든 DI 프레임워크로, Dagger 2를 기반으로 구현되어있다. Hilt는 안드로이드 앱에서 DI를 쉽게 구현할 수 있도록 도와준다. Hilt는 컴파일 시간에 의존성을 생성하며, Dagger 2보다 사용이 간편하다. 또한, Android Jetpack과의 연동성이 높아, 안드로이드에서 사용하기 적합한 DI 프레임워크이다.
3. Koin
Koin은 Kotlin 기반의 DI 프레임워크로, Kotlin의 문법과 특징을 활용하여 DI를 쉽게 구현할 수 있다. Koin은 런타임에 의존성을 생성하며, 앱의 크기가 작아진다. 또한, Dagger 2에 비해 학습 곡선이 낮기 때문에 초보자도 쉽게 사용할 수 있다.
----차후 예제 Hilt 예제 추가 예정----
'안드로이드(Kotlin)' 카테고리의 다른 글
Kotlin 코틀린의 Sealed Class (0) | 2023.03.17 |
---|---|
Kotlin 코틀린의 Flow (0) | 2023.03.17 |
Kotlin 코틀린의 Coroutine (1) | 2023.02.09 |
Kotlin 코틀린의 object VS companion object (0) | 2022.08.30 |
Kotlin 코틀린의 싱글톤(Singleton) (0) | 2022.08.30 |