View
63
Download
0
Category
Preview:
Citation preview
Android 에서 어떻게 활용할 것인가 ?
• Context 가 필요한 클래스• Application 생명주기와 밀접한 클래스
(DB Manager, System Services, Analytics tracker)
• 핵심 비즈니스 로직
Android 에서 어떻게 활용할 것인가 ?
• Context 가 필요한 클래스• Application 생명주기와 밀접한 클래스
(DB Manager, System Services, Analytics tracker)
• 핵심 비즈니스 로직ButterKnife 의 Object 버전이라 생각하면 이해하기 편할
듯
Dagger 2 API
• @Inject : 의존성을 요청• @Module : 의존성을 제공하는 메서드들을 가진 클래스• @Provide : 모듈 내에서 언급된 의존성들을 어떻게 구성하고 제공하는지 알려주는 메서드• @Component : @Module 들과 @Inject 사이의 다리 역할
Dagger 2 API
Dagger 2 는 모듈 (@Module) 에서 제공 (@Provide)하는 요소들을 브릿지 (@Component) 에서 연결시켜준 클래스 내에서 요청(@Inject) 하는 의존 요소나 다른 @Provide 에서 요청하는 인자들에 주입 시켜준다 .
Dagger 2 API
• @Inject : 의존성을 요청• @Module : 의존성을 제공하는 메서드들을 가진 클래스• @Provide : 모듈 내에서 언급된 의존성들을 어떻게 구성하고 제공하는지 알려주는 메서드• @Component : @Module 들과 @Inject 사이의 다리 역할• @Scope : 의존성 관련 객체의 범위를 지정함 • @Qualifier : 같은 클래스의 종속성을 식별하는 식별자
Dagger 2 API
• @Inject : 의존성을 요청• @Module : 의존성을 제공하는 메서드들을 가진 클래스• @Provide : 모듈 내에서 언급된 의존성들을 어떻게 구성하고 제공하는지 알려주는 메서드• @Component : @Module 들과 @Inject 사이의 다리 역할• @Scope : 의존성 관련 객체의 범위를 지정함 • @Qualifier : 같은 클래스의 종속성을 식별하는 식별자
Method Injection
• 메서드에 @Inject 어노테이션• 메서드 인자가 의존 요소• 객체가 생성된 후 주입이 발생• 의존요소에 this 를 전달할 경우에만 사용하는 것을 권장함
Field Injection
• 필드 ( 멤버변수 ) 에 @Inject 어노테이션• 필드는 private final 이 될 수 없다• 객체가 생성된 후 주입이 발생• 자체적으로 주입에 대한 처리가 필요함• Constructor Injection 을 사용하지 못하는 경우 사용 가능
(e.g. Activity)
Scope Annotations
• 단 하나만의 인스턴스를 생성한다• @Singleton 은 제일 큰 범위의 어노테이션이다• 아래와 같은 코드로 Custom 스코프 어노테이션을 지정할 수 있다
결론• Android 프레임워크 특성상의 Boilerplate 코드들을 줄일 수 있음• 객체간의 결합도를 느슨하게 만들어 테스트나 유지보수가 편리함• MVP 패턴의 아키텍쳐를 고려해봤을 때 , Presenter 요소를 매
Activity 마다 쉽게 주입할 수 있게 됨 .
• 다만 , 개념이 어렵고 의존관계에 대한 코드상의 트래킹이 어려울 가능성이 있기 때문에 , 프로젝트 내 모든 의존성을 Dagger 로 대체하는 것은 오버 엔지니어링이라는 판단 .
• Test 가 반드시 필요한 핵심 비즈니스 모델과 Boilerplate 코드가 난무하는 Application, Activity, Fragment 요소들에만 우선적으로 적용하는 것을 목표 .
Recommended