프로그래밍
-
[Android] Dagger (Module, Provides, Component, Inject) 간단 용어 설명프로그래밍/Android 2022. 4. 25. 20:53
Module 클래스에만 사용하며 객체(사람 등..)을 나타냄 Provides Module 안의 메소드에만 사용 가능하며 Module(객체)가 가지고 있는 정보나 행동을 정의함 예를 들어 ProvideUUID 라고 한다면 객체의 고유한 아이디를 제공하는 것이고 ProivdeCoffee라면 객체가 커피를 만들어 제공하는 행동을 나타내는 것임 Component interface나 abstract 클래스에 사용가능(추상 클래스) 반드시 한 개 이상의 추상메소드가 있어야함 - 프로비전(Provision) Method : 매개변수가 없고 Module의 Provides가 정의한 타입을 반환형으로 가짐 - 멤버인젝션(Member-Injection) Method : void타입을 반환하며 Target을 받는 매개변수 한..
-
[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를 자식 클래..
-
[Windows 10] 윈도우 10 작업관리자 느려짐 발생 해결방법프로그래밍/Windows 10 2019. 6. 2. 10:05
나는 윈도우 10을 쓰고 있는데 가끔 작업관리자에 들어가면 극심한 렉과 함께 마우스를 움직이기조차 힘들게 될 경우가 있었다. 최근에는 그런 현상이 발생하지 않았다가 오늘 또 갑작스럽게 이 현상이 발생하여 원인을 찾다가 해결방법을 알게 되어서 포스팅을 남기려고 한다. 문제의 주범은 은행 사이트에서 설치하는 보안 프로그램이었다. 며칠 전 은행 업무를 보기 위해서 어쩔 수 없이 보안 프로그램을 덕지덕지 깔게 되었는데, 그 뒤로 작업 관리자만 들어가면 극심하게 느려지는 현상이 발생했다. 구글링을 통해 찾아본 결과 이 문제의 원흉은 바로 AhnLab Safe Transaction 이라는 놈이었다. 마음 같아선 그냥 삭제해버리고 싶었지만, 또 은행 사이트에 들어갈때마다 설치하라고 할게 분명했기 때문에 지울수도 없는..