🔥🔥 요즘 아주 한 키워드 중 하나죠!

 

DI (Dependency Injection)

 

종속 항목 주입 또는 의존성 주입

 

 

프로그래밍에 널리 사용되는 기법이고 

Android 개발에 적합하다고 하는데요

 

 

 

 

DI? Koin? Dagger? Hilt?

한번 알아볼까요?

 

 

 

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

Android의 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 종속 항목 삽입(DI)은 프로그래밍에 널리 사용되는 기법으로, Android 개발에 적합합니

developer.android.com

 

 

간단하게 종속 항목 삽입이란

 

"

   클래스에서 다른 클래스의 참조가 필요한 경우

   그 해당 필요한 다른 클래스를 종속 항목이라 하며

   두 클래스 사이의 의존 관계를 소스코드 내부가 아닌

   외부 설정 파일 등을 통해 정의하게 되는 디자인 패턴입니다.

                                                                                                    "

 

 

 

간단하게 요약해도 말이 조금 어렵죠? 😅😅

이번에는 소스코드로 예시를 보여드리겠습니다.

 

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()
	}
    
  ...

}

 

위와 같이 기존 소스코드를 변경해야 합니다.

 

여기서 기존 WeatherDataClassWeatherUIClass 말고

다른 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

 

 

[Kotlin] Android Koin을 활용하여 DI 적용 (경량화 DI Koin)

요즘 아주 자주 보이는 DI 종속 항목 삽입의 개념을 알고자 간단한 프로젝트를 생성하여 Koin을 이용한 DI를 적용해봤습니다. (조용히 숨만 쉬고 사는데도 배워야 할 앱 개발 지식은 끝이 없네요...

salmonpack.tistory.com

 


 

여기까지 저의 긴 글을 읽어주셔서 감사합니다.

제가 습관적으로 코딩을 하는 그날까지 습관적으로 코딩을 하기 위해 글 작성을 꾸준하게 하겠습니다.

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기