Dependency Injection Pattern (DI 패턴) 이란?
·
Design Pattern
DI란 무엇인가? DI란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다. Android에서의 DI 종속 항목 삽입(DI)은 프로그래밍에 널리 사용되는 기법으로, Android 개발에 적합합니다. DI의 원칙을 따르면 훌륭한 앱 아키텍처를 위한 토대를 마련할 수 있습니다. 종속 항목 삽입을 구현하면 다음과 같은 이점을 누릴 수 있습니다. 코드 재사용 가능 리팩터링 편의성 테스트 편의성 클래스에는 흔히 다른 클래스 참조가 필요합니다. 예를 들어 Car 클래스는 Engine 클래스 참조가 필요할 수 있습니다. 이처럼 필요한 클래스를 종속 ..
A problem occurred configuring root project 'Unscramble'.> Could not resolve all files for configuration ':classpath'. 오류해결
·
Android
개요 android codelab (https://developer.android.com/codelabs/basic-android-kotlin-compose-viewmodel-and-state?hl=ko#2) 수행 중 android studio 버전 업데이트가 필요하다는 메세지를 보고 업데이트 수행 (dolphin -> flamingo) 이후 codelab 소스코드 Gradle project sync 실패 Compose의 ViewModel 및 상태 | Android Developers 이 Codelab에서는 아키텍처 구성요소 중 하나인 ViewModel을 사용하는 방법을 알아봅니다. 구성 변경 중에 앱 상태를 유지하도록 ViewModel을 구현합니다. developer.android.com 해결방법 ht..
Android AppBar(Toolbar) Menu에 Lottie 사용하기
·
Android
안드로이드 앱의 메뉴 아이템에 Lottie Json을 사용 및 이벤트 처리하는 방식을 소개한다. LottieImageView를 통해 사용하는 방법은 자료들이 꽤 있었지만, 나처럼 앱바에서 Lottie를 사용하는 예제는 많지 않은 것 같아서 글을 써본다! 이 글에 사용된 방법은 Lottie 5.2.0 버전에서 구현한 방법이다. 최신버전의 Lottie는 Lottie Github에서 확인할 수 있다. https://github.com/airbnb/lottie-android GitHub - airbnb/lottie-android: Render After Effects animations natively on Android and iOS, Web, and React Native Render After Effect..
소스트리 비교(diff) 최대 라인 수 늘리기
·
카테고리 없음
소스트리 사용 중 파일 변경 확인시에 내가 변경한 라인까지 보이지 않는 현상이 있었다. 이를 간단히 해결해보자 아래의 이미지에서 최대 비교 줄 수 옵션을 기본 500 에서 1000으로 늘려주니 수정사항에 대해서 모두 확인할 수 있었음!
kotlin data class redeclaration error 해결하기
·
Android
현재 진행하는 사이드 프로젝트 작업 중 데이터 클래스에 대해서 파일을 하나만 선언했는데에도 gradle 빌드 중 redeclaration 오류가 발생하는 현상이 있었다. Windows 환경에서는 잘 동작하지만 Mac 환경에서는 항상 발생하는 것으로 봐서 환경적인 문제로 생각되어 Invalidate cache 및 Restart 시도 해봤지만 동일하게 발생하여 구글링 한 결과 해결할 수 있었다. gradle 캐시를 지운 후 정상적으로 동작했다. ./gradlew clean rm -rf ~/.gradle/caches/* Mac 또는 Linux 환경에서 권한이 없다고 아래처럼 터미널 창에 표시 될 경우에는 chmod 명령어를 통해 권한을 주자. zsh: permission denied: ./gradlew 여튼 ..
[프로그래머스] 코딩테스트 연습 - 귤 고르기 코틀린 풀이
·
알고리즘
귤 고르기 문제 설명 경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다. 예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다. 경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를..
manifestPlaceholders가 값을 찾지 못할 때 해결방법
·
Android
개발 도중 manifestPlaceholders를 통해 카카오 앱 키를 local.properties 파일에서 읽어오는 기능이 필요했는데 매니페스트에서 읽을 때에만 정상적으로 읽지 못해서 카카오맵이 정상적으로 보이지 않는 이슈가 있었다. 원인은 매우 간단했는데, local.properties에서 선언한 앱키를 따옴표 없이 감싸준 이후 정상동작 했다. 아래는 참고 할만한 코드를 공유 해본다 // build.gradle Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def KAKAO_API_KEY = properties.getPrope..
Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
·
Android
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.hyeonwoo.art_android, PID: 26068 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hyeonwoo.art_android/com.hyeonwoo.art_android.ui.main.MainActivity}: android.view.InflateException: Binary XML file line #35 in com.hyeonwoo.art_android:layout/activity_main: Binary XML file line #35 in com.hyeonwoo.art_android:layout/activi..
android studio에서 실행한 앱이 설치되지 않을 때
·
Android
최근 개발중인 사이드 프로젝트 앱에서 안드로이드 스튜디오를 통해 앱을 실행할 경우, 실행은 되지만 앱이 설치가 되지않는 현상이 있었다. 해당 이슈의 원인은 바로! AndroidManifest 파일에 있었는데 위의 인텐트 필터를 보면 MAIN, LAUNCHER와 함께 여러 값들이 있는데, MAIN, LAUNCHER에는 데이터 태그를 처리할 수 없다고 한다... 그래서 아래처럼 인텐트 필터를 분리시켜주면 된다고 한다. 이제 다시 설치해보자!! 정상적으로 앱이 설치된걸 확인했다. Reference : https://stackoverflow.com/questions/20285496/android-application-installed-but-wont-open-on-device Android Application..
error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements ArtOnApplication_GeneratedInjector,
·
Android
Hilt를 사용하면서 만난 오류이다. error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements ArtOnApplication_GeneratedInjector, 에러가 난 코드는 아래와 같다. class KakaoAuthService @Inject constructor( @ActivityContext private val context: Context ) { fun startKakaoLog..