티스토리 뷰
dagger에서 추가적으로 알아두면 좋은 어노테이션들이 있다
이 포스팅에서 설명하는 @binds는 몰라도 dagger를 사용하는데 전혀 지장이 없지만
이 어노테이션을 사용했을때 훨씬 깔끔하고 적은 코드만으로 원하는 목표를 달성할수 있기때문에
알아두면 좋다
@Binds 어노테이션
dagger에게 인터페이스를 공급할때 어떤 구현체가 필요한지 알려줄수 있다
@Binds 어노테이션은 반드시 abstract function에 쓰여야한다
abstract function의 리턴타입은 우리가 공급하려고 하는 구현체의 인터페이스여야 한다
설명만으로는 다소 부족하니 코드를 보자
무언가를 저장할수 있는 Storage라는 인터페이스가 있다
저장되는 공간에 따라 우리는 다양한 Storage를 구현한 구현체를 만들수 있다
android의 SharedPreference를 사용하는 Storage의 구현체인 SharedPreferencesStorage라는 클래스를 만들었다
그리고 dagger가 이를 알수 있도록 @Inject 어노테이션을 통해 생성자 주입을 준비했다
그런데 아마도 실제로 이 Storage를 사용하는 코드에서는
SharedPreferencesStorage 타입의 클래스를 파라메터로 받는 클래스가 아니라
추상화된 Storage 클래스를 파라메터로 받을것이다
그래야지만 다양한 종류의 Storage 구현체를 인자로 받아 Storage로서의 역할을 수행하게끔 할것이기 때문이다
그렇다면 dagger에게 SharedPreferencesStorage라는 타입 말고 Storage라는 타입으로 리턴하는 의존성을 어떻게 알려주면 될까?
당연히 우리는 이미 @Provides 어노테이션에 대해 배웠기 때문에
@Provides 함수를 이용해서 위와 같이 구현할수 있다
하지만 좀 더 간단하게 @Binds라는 어노테이션을 활용할수 있다
추상 클래스와 추상 메소드를 사용해서 리턴값으로 원하는 리턴타입을 선택하면
@Provides로 구현했던것과 동일하게 구현할수 있다
하지만 dagger 내부적으로 code를 생성할때는 @Binds를 사용하는 편이 훨씬 적은 코드를 생산해내고 효율성도 좋다
'WEB2.0 > 프로그래밍' 카테고리의 다른 글
Android Architecture Components ViewModel이 왔어요 (0) | 2019.12.18 |
---|---|
dagger에 context를 주입하는 좋은 방법 @BindsInstance (0) | 2019.12.17 |
dagger의 서브그래프의 핵심 subcomponent (1) | 2019.12.15 |
dagger를 통한 의존성 주입 안드로이드 실전 (0) | 2019.12.14 |
의존성 주입에 대한 기본 이해 (3) | 2019.12.13 |
- Total
- Today
- Yesterday
- 벤처
- 구글
- 웹표준
- 자바스크립트
- 스마트폰
- AWS
- JavaScript
- 대학생
- php
- 애플
- CSS
- 경진대회
- android
- 모바일
- iPhone
- 안드로이드
- Apple
- 소프트웨어
- 공모전
- 앱스토어
- 어플리케이션
- 게임
- 트위터
- 앱
- 아이폰
- 창업
- 네이버
- 아이디어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |