프로그래밍/Android
-
[Android] Dagger2 Multi binding 멀티바인딩(Set, Map)프로그래밍/Android 2022. 4. 24. 18:47
Dagger의 멀티바인딩을 사용하면 여러 모듈에 있는 같은 타입의 객체를 하나의 Set이나 Map 형태로 관리할 수 있다. Set 멀티 바인딩 @Module class SetModule { @Provides @IntoSet fun provideHello(): String { return "Hello" } @Provides @IntoSet fun provideWorld(): String { return "World" } @Provides @ElementsIntoSet fun provideSet(): Set { return HashSet(listOf("Charles", "Runa")) } } class Foo3 { var strings: Set? = null @Inject set fun print() { v..
-
[Android] Dagger Binding의 종류프로그래밍/Android 2022. 4. 24. 14:03
@Binds - 모듈 내의 추상 메서드에 붙일 수 있다. - 반드시 하나의 매개변수만을 가져야 한다. - @Provides 메소드 대신 좀 더 효율적으로 사용할 수 있다 - 객체를 생성하는 대신 컴포넌트 내의 객체를 파라미터로 받아 바인딩 함으로써 좀 더 효율적으로 사용이 가능하다. @Binds abstract Random bindRandom(SecureRandom secureRandom); - 이미 바인드된 SecureRandom을 Random 타입으로 한 번 더 바인드 할 수 있다. @BindsOptionalOf - 모듈 내의 추상 메소드에 붙일 수 있다. - 매개변수를 가질 수 없다. - 특정 타입을 반환형으로 가져야 한다. - 예외 사항을 던질 수 없다.(Exception) - @BindsOpti..
-
[Android]Dagger Singleton과 Reusable 차이프로그래밍/Android 2022. 4. 24. 12:41
Singleton Annotation의 경우 객체를 무조건 하나만 생성하는데 반해 Reusable Annotation은 객체가 재사용할 수 있는 경우 해당 객체를 재사용하고 그렇지 못할 경우 새로 생성함. 조금더 유연하다고 생각하면 될듯 @Test fun testObjectIdentity() { println("testObjectIdentity start") println("singleton으로 객체를 생성함\nReusable 이용하면 재사용 가능하면 재사용하고 아닐 경우 새로 생성함") val myComponent: MyComponent = DaggerMyComponent.create() val temp1 = myComponent.`object` val temp2 = myComponent.`object..
-
[Android] Dagger2 Component Generate 되지 않을 때 with Kotlin프로그래밍/Android 2022. 4. 24. 11:48
Dagger 라이브러리를 공부하고 있는데 Component를 정의한 후에 DaggerComponent를 사용하려고 하면 클래스를 못찾는 경우가 왕왕 있었다. 정말 스트레스였는데 나름대로 해결방법을 찾았다. 1. Gradle 업데이트 apply plugin: 'kotlin-kapt' dependencies { implementation 'com.google.dagger:dagger:2.x' kapt 'com.google.dagger:dagger-compiler:2.x' } 안드로이드 공식문서에 가보면 위와 같이 나와있지만 위와 같은 방법으로 해도 제대로 적용이 되지 않는다. Dagger github에 접속해보면 업데이트된 gradle이 적혀있다. implementation 'com.google.dagger..
-
[Android] SOLID 설계 원칙프로그래밍/Android 2022. 4. 19. 16:01
2000년대 초반 로버트 C.마틴이 객체 지향 프로그래밍 및 설계에 대한 SOLID라는 5가지 원칙을 소개했다. 각 원칙의 머리글자를 따서 만든 명칭인데, 유지보수와 확장이 쉬운 애플리케이션을 만들려고 할 때 이 원칙을 사용할 수 있다. 1. 단일책임원칙(Single Responsibility Principle) 모든 클래스는 하나의 책임만을 가지며, 클래스는 그 책임을 완전히 캡슐화해야 한다. 2. 개방-폐쇄 원칙(Open Closed Principle) 소프트웨어가 확장에 대해서는 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 3. 리스코프 치환 원식(Liskov Substitution Principle) 클래스 S가 클래스 T의 자식 클래스라면 별다른 변경 없이 부모 클래스 T를 자식 클래..