DI Dependency Injection 프로그래밍에 많이 사용되면 방법이며 안드로이드 개발에 적합하다고 함
다음과 같은 이점이 있다고 한다.
1) 코드 재사용 가능
2) 코드 리팩토리 편의성
3) 테스트 편의성
종속성이라고 하니까 implement,extent 이런게 떠오르는데 다른가?
1. 객체를 생성하는 방식
디벨로퍼 페이지에서는 자동차와 엔진을 가지고 설명을 한다. 나도 같은 방식으로 해석해 보자면
만약 우리가 (1) 전기차 와 (2) 가스차를 둘다 이용해 보고 싶은 상황에서 엔진이 전기엔진과 가스 엔진이 있다
1) 객체속에서 객체를 인스턴스하는 방법
class ECar{
private val engine = ElecEngine()
fun start(){
engine.start()
}
}
class GCar{
private val engine = GasEngine()
fun start(){
engine.start()
}
}
객체 속에서 인스턴스 하는 방식을 사용한다면 2가지의 자동차가 필요하다
2) 생성자를 이용한 방식
class Car(engine: Engine) {
engine.chageTo
fun start() {
engine.start()
}
}
fun main (){
val engine = Engine() // ElecEngine()
val car = Car(engine) //
}
생성자를 통해 받기 때문에 Engine의 다양한 서브 클래스를 이용 할 수 있다.
3) setter을 통한 삽입 (생성자를 이용하지 못 하는 경우)
Class Car(){
lateinit var engine: Engine
fun start() {
engine.start()
}
}
fun main(){
val car = Car()
car.engine = Engine()
}
2. 그럼 Dagger은 뭐냐
1) 뭔데
생성자가 몇 안되는 객체는 종속삽입시에 별 문제가 되지 않지만 생성자가 많은 경우 귀찮아 지고 코드의 길이가 길어지게 되거나, 종속 항목을 전달하기 전에 생성할 수 없게되면 메모리에서 종속 항목의 전체 기간을 관리하는 컨테이너가 필요하게 된다. 이 때 사용하는 종속 항목 삽입 라이브러리가 Dagger임.
Dagger는 개발자가 직접 코드를 했을 코드를 모방하는 코드를 자동으로 생성해 준다.
2) 어떻게 쓰는데? (아주 기본)
class의 생성자 앞에 @Inject를 사용해서 대거가 알 수 있도록 작성하고, 그 class를 @Component 를 사용한 graph를 통해서 어떻게 자동으로 생성 할 수 있는지 알려주는 것
그니까,
(1) Car 를 만드는데 필요한 Engine생성자를 @Inject로 표시하여 어떻게 생성이 되는지를 알려줌
(2) @Component를 표시한 graph를 통해 필요한 객체를 반환하게 함
(3) 객체생성시에 graph를 통해 Car생성
자세한 사용 방법은 안드로이드 디벨로퍼 페이지!
developer.android.com/training/dependency-injection/dagger-android
Android 앱에서 Dagger 사용 | Android 개발자 | Android Developers
Dagger 기본사항 페이지에서는 Dagger가 앱에서 종속 항목 삽입을 자동화하도록 지원하는 방법을 설명했습니다. Dagger를 사용하면 지루하고 오류가 발생하기 쉬운 상용구 코드를 작성할 필요가 없
developer.android.com
3. 그럼 Hilt는 뭐냐
안드로이드에서 종속 항목 삽입을 위한 jetpack의 권장 라이브러리로 Dagger을 기반으로 만들어 졌음
힐트 위주로 공부를 해봐야겠다
'안드로이드 jetpack > sunflower' 카테고리의 다른 글
6.liveData를 사용해 보자(Viewmodel 적용기) (0) | 2021.05.04 |
---|---|
5. work에 대해서 알아보자 (0) | 2021.05.02 |
4. Paging, PagingAdapter (0) | 2021.05.02 |
3.recyclerview(ListAdapter) (0) | 2021.05.02 |
2.sunflower분석 ( hilt) (0) | 2021.04.29 |