티스토리 뷰
안드로이드 앱을 실행하고 우리가 얻을수 있는 인스턴스중에 하나가 바로 context인데
context는 안드로이드 앱의 구석구석에서 필수적으로 쓰인다
SharedPreferences를 가져올때도 필요하고, 특정 퍼미션의 기능을 호출할때도 쓰이고
안쓰이는 곳이 없다
그런데 context 객체는 우리가 직접 만들수 있는게 아니라 안드로이드 시스템이 만들어주는 객체이기때문에
우리가 만든 클래스들이 context를 사용하기 위해서는 이 값을 파라메터를 통해서 전달받아야 한다
context를 dagger의 그래프 안으로 어떻게 주입할까?
앱이 실행되어있다면 context는 이미 사용가능한 상태이기때문에 우리는 이 값을 dagger에게 전달만 하면된다
context를 전달할수 있는 방법은 여러가지가 있는데
아래의 방법이 가장 많은 곳에서 찾을수 있는 예제다
AppModule의 생성자파라메터로 Context를 받아서 @Provides 어노테이션으로 주입해주는 방법이다
DaggerAppComponent 의 인스턴스를 만들때 빌더를 통해서 context를 포함한 appModule을 전달받아 생성한다
매우 이해하기 쉽다
위의 예제처럼 생성자 형태로 파라메터를 주입할수 있지만
builder 형태로 주입할수도 있다
이때 필요한 어노테이션은 @Component.Builder
그리고 각각의 파라메터를 주입받는 메소드들은 @BindsInstance를 사용해서
리턴값으로는 동일한 인터페이스 타입인 Builder 를 리턴해야한다
이렇게 해서 메소드 체이닝이 가능해진다
그리고 소개할 다른 방법은 component factory에서 @BindsInstance 어노테이션을 사용하는 것이다
큰 차이점이라면 첫번째의 예는 AppModule을 통해서 context를 전달받았고,
두번째예는 Component를 생성할때 Context를 전달받았다라는것 정도이다
Component를 만들때는 굳이 Factory 클래스를 만들지 않아도 되는데
AppComponent 의 구현체를 초기화 할때 context객체를 파라메터로 전달할것이기 때문에
별도의 Factory 클래스를 만들어야한다
그리고 팩토리 클래스에서 context 파라메터 앞에 @BindsInstance 라는 어노테이션을 사용하면
dagger에게 앞으로 context가 필요하면 이값을 전달하라고 알려주는 방법이된다
굳이 @Provides 어노테이션을 사용하지 않아도 dagger는 context의 주입방법을 알게 된다
두방식의 큰차이는 없는데 다만 새로운 @BindsInstance 의 어노테이션이 이렇게 사용될수 있다는 것을 알아두도록하자
'WEB2.0 > 프로그래밍' 카테고리의 다른 글
golang 기본 문법 (0) | 2019.12.19 |
---|---|
Android Architecture Components ViewModel이 왔어요 (0) | 2019.12.18 |
dagger의 @binds 활용 (0) | 2019.12.16 |
dagger의 서브그래프의 핵심 subcomponent (1) | 2019.12.15 |
dagger를 통한 의존성 주입 안드로이드 실전 (0) | 2019.12.14 |
- Total
- Today
- Yesterday
- php
- 아이디어
- AWS
- 스마트폰
- android
- 창업
- 공모전
- 경진대회
- 트위터
- 자바스크립트
- 앱스토어
- 애플
- 앱
- 소프트웨어
- iPhone
- 아이폰
- 네이버
- 게임
- Apple
- 모바일
- CSS
- 대학생
- 웹표준
- 벤처
- 어플리케이션
- 구글
- 안드로이드
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |