🔥🔥 요즘 아주 핫한 키워드 중 하나죠!
DI (Dependency Injection)
종속 항목 주입 또는 의존성 주입
프로그래밍에 널리 사용되는 기법이고
Android 개발에 적합하다고 하는데요
DI? Koin? Dagger? Hilt?
한번 알아볼까요?
간단하게 종속 항목 삽입이란
"
클래스에서 다른 클래스의 참조가 필요한 경우
그 해당 필요한 다른 클래스를 종속 항목이라 하며
두 클래스 사이의 의존 관계를 소스코드 내부가 아닌
외부 설정 파일 등을 통해 정의하게 되는 디자인 패턴입니다.
"
간단하게 요약해도 말이 조금 어렵죠? 😅😅
이번에는 소스코드로 예시를 보여드리겠습니다.
class WeatherUIClass() {
...
val weatherClass: WeatherDataClass = WeatherDataClass(mContext)
weatherClass.getDataList().forEach {
binding.tvSky.text = it.getSky()
binding.tvTemperature.text = it.getTemperature()
}
...
}
위와 같이 WeatherDataClass에서 🌤🌧
날씨 데이터 리스트를 받아 화면에 출력합니다.
WeatherUIClass에서는
WeatherDataClass를 참조하고 있습니다.
둘이 사이에 의존 관계가 있다는 거죠!
(WeatherUIClass는 WeatherDataClass의 데이터 정보를 의존하고 있습니다.)
하지만 이 의존관계는 약간의 문제가 있습니다.
만약 기존 사용하던 날씨 정보 API를 바꾼다거나
다른 정보를 필요하다면
class WeatherUIClass() {
...
// val weatherClass: WeatherDataClass = WeatherDataClass(mContext)
val weatherClass: NewWeatherDataClass = NewWeatherDataClass(mContext)
weatherClass.getDataList().forEach {
binding.tvSky.text = it.getSky()
binding.tvTemperature.text = it.getTemperature()
}
...
}
위와 같이 기존 소스코드를 변경해야 합니다.
여기서 기존 WeatherDataClass가 WeatherUIClass 말고
다른 Class와도 의존관계였다면 WeatherDataClass와 관련된
모든 소스를 찾아가서 수정해야겠죠??
이렇게 수정사항이 있을 때마다 소스의 모든 곳에 찾아가서 변경하게 되면
수정 작업도 힘들고 실수도 발생하게 됩니다.
class WeatherUIClass(val dataClass: WeatherDataClass) {
...
dataClass.getDataList().forEach {
binding.tvSky.text = it.getSky()
binding.tvTemperature.text = it.getTemperature()
}
...
}
interface WeatherDataClass {
fun getDataList()
}
그렇다면 위와 같이 변경되면 어떨까요?
Data 관련된 interface를 생성하고
해당 interface를 상속받는 데이터를 Class 생성자로 받게 된다면
Data 관련 class가 변경되어도 WeatherUIClass에
해당 interface를 상속받은 또다른 데이터 Class로 교체만 해준다면
그 이후 로직은 변경할 필요가 없습니다.
또한 테스트가 필요하여 테스트 데이터를 적용시켜야 한다면
interface WeatherDataClass를 상속받아
테스트 데이터 Class를 생성하여 주입해주면
끝!!
테스트를 위하여 기존 소스를 주석 처리하고
데이터를 하드 코딩하여 테스트 상황과 운영 상황을 분기하는
귀찮은 작업이 필요 없습니다!
Dagger
Hilt
Koin
그렇다면 DI 하면 항상 따라오는
위의 키워드들은 무엇을 뜻하는 걸까요??
바로 DI Framework입니다.
DI를 매번 직접 구현하다 보면 시간도 많이 들고
잘못하면 코드가 더 길어지고 복잡해질 수 있습니다.
(절대 귀찮아서가 아닙니다..ㅎㅎ)
개발자라는 직업은 신기한 집단이라고 생각합니다.
항상 모든 소스를 공유하며 모두가 함께 발전시켜 나가고 있죠.
저희들의 글로벌한 개발자 선배님들이 이미
DI Framework를 완성시켜 주셨습니다.
(박수 ㅉㅉㅉㅉㅉ)
저희는 감사한 마음으로
DI Framework를 이용하여
프로젝트에 DI를 적용시키면 됩니다!!
Koin
여기까지 저의 긴 글을 읽어주셔서 감사합니다.
제가 습관적으로 코딩을 하는 그날까지 습관적으로 코딩을 하기 위해 글 작성을 꾸준하게 하겠습니다.
'Android > DI' 카테고리의 다른 글
[Kotlin] Koin은 DI가 아니다?! (0) | 2023.01.14 |
---|---|
Android Hilt 적용하기2 (@Binds, @Provides, @ApplicationContext) (0) | 2022.12.21 |
Android Hilt 적용하기1 - (Koin vs Hilt) (2) | 2022.12.10 |
[Kotlin] Android Koin을 활용하여 DI 적용 (경량화 DI Koin) (0) | 2022.11.25 |
Android Hilt 라이브러리 충돌 오류 (4) | 2022.11.13 |
최근댓글