Dagger2를 알아보자 – 기본편
Dagger2를 알아보자 – Scope (You’re here)
Dagger2를 알아보자 – Injection의 종류
Dagger2를 알아보자 – Qualifier
Dagger2를 알아보자 – Binding
Dagger2를 알아보자 – Multibinding
Dagger2를 알아보자 – SubComponent
Dagger2를 알아보자 – Android
Dagger2를 알아보자 – Testing(준비중)
Dagger2를 알아보자 – Dynamic Feature에 적용하기(준비중)


Dagger의 Scope

@Singleton

Scope 애노테이션을 통해 특정 그래프 Scope내에서 객체의 재사용여부를 지정할 수 있습니다. 일반적으로 @Singleton 애노테이션을 사용하여 Scope를 지정하고 객체를 재사용합니다.

모듈클래스에서 @Provide메소드 또는 인젝트 가능한 클래스에서 @Singleton 애노테이션을 사용하면 됩니다.

마찬가지로 Comonent에도 @Singleton 애노테이션을 붙여야합니다.

컴포넌트에 붙은 Scope(범위)내에서 객체들을 관리 하게 되고, 처음 요청시에만 객체를 생성하고 그 다음 부터는 처음에 제공한 같은 인스턴스를 제공합니다.

@Singleton 애노테이션을 붙였다 뗐다하면서, 로그 및 디버깅을 통해 객체의 hashCode() 값을 확인해보시기 바랍니다.

@Reusable

@Reusable도 @Singleton을 비롯한 다른 커스텀 스코프와 비슷한 역할을 합니다. 특정 컴포넌트 스코프에 종속되지 않기 때문에 컴포넌트에 @Reusable을 선언하지 않아도 됩니다. 이전 객체를 재사용가능하면 재사용하고 아니면 새로 생성합니다. 즉 다른 스코프 애노테이션처럼 같은 인스턴스임을 보장하진 않습니다. 항상 동일한 인스턴스를 사용해야하는게 아니라면 메모리 관리측면에서 조금 더 효율적입니다.

Custom scope

물론 @Singleton대신 Custom scope을 만들 수 도 있습니다. Scope내에서 더 작은 Scope를 지정할 때, @Singleton 애노테이션 하나로 Scope를 나눌순 없을테니 말이죠. 아래와 같이 커스텀 스코프를 만들 수 있습니다.

Buy me a coffeeBuy me a coffee

0개의 댓글

답글 남기기

이메일은 공개되지 않습니다.