Clean Software/Dependency Injection

    3. Android 에서 Dagger로 DI 적용하기

    Application에 Dagger 컴포넌트(그래프) 만들기 @Component Android에서 개발자는 앱이 실행되는 동안 Dagger 그래프 인스턴스가 계속 메모리에 있기를 원하기 때문에 일반적으로 Application 클래스에 Dagger 그래프를 만듭니다. 이렇게 하면 그래프는 앱 수명 주기 전체에 연결됩니다. Dagger 그래프를 생성하는 인터페이스는 @Component로 어노테이션 하여 ApplicationComponent 또는 ApplicationGraph로 호출할 수 있습니다. 일반적으로 다음 코드에서와 같이 Application 클래스에 컴포넌트의 인스턴스를 정의하고 Application 그래프가 필요할 때마다 인스턴스를 호출합니다. // 애플리케이션 그래프의 정의 @Componen..

    2. Dagger로 DI 적용하기

    "hello world" 의존성 주입하기 (@Module, @Provides, @Componet) Hello world 문자열을 제공할 모듈 만들기 @Module은 의존성을 제공하는 클래스에 붙이고, @Provides는 의존성을 제공하는 메서드에 붙인다. Dagger는 컴파일타임에 @Module과 @Provides 어노테이션을 읽고 의존성 주입에 필요한 파일들을 생성한다. @Module class MyModule { @Provides fun provideHelloWorld: String{ return "Hello World" } } Hello world 문자열 제공받을 컴포넌트 만들기 @Componet는 참조된 모든 의존성을 제공받을 인터페이스에 붙인다. 이때 인터페이스 내에는 제공할 의존성들을 메서드로..

    1. Android에서 수동으로 DI 적용하기

    안드로이드 앱 아키텍처에 따라 수동으로 의존성 주입하기 Android 앱의 로그인 흐름을 다룰 때 LoginActivity는 LoginViewModel에 종속되고 LoginViewModel은 UserRepository에 종속됩니다. 그러면 UserRepository는 UserLocalDataSource와 UserRemoteDataSource에 종속되고 UserLocalDataSource와 UserRemoteDataSource는 Retrofit 서비스에 종속됩니다. 따라서 다음과 같이 구현해야 합니다. Repository.kt class UserRepository( private val localDataSource: UserLocalDataSource, private val remoteDataSource:..

    의존성 주입 (목차)

    의존성주입은 일반적인 프로그래밍 영역에서 널리 알려진 기술이고 안드로이드 개발에도 잘 적용이 되는 기술입니다. 이 의존성 주입 원칙을 따르면 훌륭한 앱 아키텍처를 만들 수 있게 됩니다. 널리 알려진 장점으로는 코드간의 종속성을 없애기 때문에 재사용성이 높아지고 리팩토링과 테스트 편의성이 높다는 장점이 있습니다. 그럼 이렇게 무서운 두 단어, '의존성'과 '주입' 이라는 단어로 되어있는 의존성 주입의 정의와 필요성, 그리고 실제 구현 방법에 대하여 간단하게 알아보려 합니다. 의존성 주입이란 먼저 의존성의 정의를 살펴봅시다. 보통 한 클래스(viewmodel)가 다른 클래스(datasource) 객체를 사용할 때, viewmodel클래스 내부에 사용하고자 하는 datasource클래스의 인스턴스를 생성해서 ..

    의존성 주입 방법 (생성자 주입, 서비스 로케이터, Dagger)

    의존성 B 클래스에서 A 클래스를 내부에 변수로 사용하게 됨으로써 B 클래스는 A 클래스에 의존관계가 생기게 되는 것 주입 내부가 아니라 외부에서 객체를 생성해서 넣어주는 것 의존성+주입 내부에서 만든 변수를 외부에서 넣어주어 의존성을 분리시켜주는 것 의존성 종류는 클래스 의존성뿐 아니라 메서드 의존성 등 다양하지만 여기선 다양한 객체를 그냥 클래스라고 명칭함 DI 장점 - 다형성을 사용할 수 있어 프로그램이 유연해진다. 더보기 다형성 정의: 다형성이란 프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메서드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질 다형성 구현방법: 오버 로딩(여러 종류의 타입을 받아들여 결국엔 같은 기능을 하도록 만들기 위한 작업), 오버 라이딩(오버 라이딩은 상..