반응형
안드로이드 맨땅에 Repository 박기
Android, iOS 2021. 1. 13. 19:01

Repository. 사전적 의미부터 시작해보자. repository 미국식 [rɪˈpɑːzətɔːri] 영국식 [rɪˈpɒzətri] 1. (어떤 것의 대량) 저장소 2. (지식·정보 등의) 보고(寶庫) - 출처 : 네이버 사전 결국 레포지토리(혹은 리포지토리)는 무엇을 저장하기 위해 존재한다. 안드로이드에 아키텍처를 적용하면서 자주 보게되는 Repository. 이 레포지토리를 이해하려면 Repository 패턴도 같이 이해하는 것이 좋다. Repository 패턴 타 블로그에서 Repository 패턴을 어떻게 정의했는지 가지고 와 보았다. 데이터 출처(로컬 DB인지 API응답인지 등)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 것을 Repository 패턴이라고 한다. 레포지..

Gradle을 업데이트하고 나서 빌드가 안된다?? (DefaultKotlinSourceSetKt 이슈)
Android, iOS 2020. 6. 8. 14:58

최근 안드로이드 스튜디오를 업데이트한 뒤 아래와 같은 메시지와 함께 빌드가 되지 않는 상황을 맞이 했다. Could not initialize class org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetKt 업데이트 정보는 다음과 같다. // build.gradle classpath 'com.android.tools.build:gradle:4.0.0' // gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip 이는 Gradle 버전에서 지원하는 코틀린 버전이 맞지 않아서 생기는 문제이다. 아래와 같이 코..

[MVVM 정복] 7. 완성한 코드로 MVVM 분석해보기
Android, iOS 2020. 5. 18. 17:52

완성한 코드는 다음과 같다. (내가 드디어 해냈다. 캄.동.) https://github.com/conquerex/mvvm-template conquerex/mvvm-template MVVM 학습과 앞으로 활용을 위한 템플릿. Contribute to conquerex/mvvm-template development by creating an account on GitHub. github.com 앞으로 개발을 한다면 다음과 같은 시나리오일 것이다. (일종의 복습) class MainActivity : BaseActivity() { // 생략 override val viewModel: MainViewModel by viewModel() // 생략 override fun initDataBinding() { v..

[MVVM 정복] 6. RecyclerView 적용해보기 (feat. 코틀린 함수)
Android, iOS 2020. 5. 18. 17:51

이번편에서도 코드를 보면서 학습하길 권한다. conquerex/mvvm-template MVVM 학습과 앞으로 활용을 위한 템플릿. Contribute to conquerex/mvvm-template development by creating an account on GitHub. github.com 이번편까지 하면 코드는 다 입력한 것이다. 물론 MVVM을 정복한 것은 아니니 계속 긴장하고 있자. (나 스스로 한테 한 얘기) 먼저 MainSearchRecyclerViewAdapter를 만들자. 코드는 역시 내 Github에 있다. 블로그 포스팅 번호와 커밋 메시지의 번호가 동일하니 참고해서 학습하면 된다. 어댑터 만들면서 item_main_image, ic_image_black_24dp, item_ma..

[MVVM 정복] 5. View에 Koin으로 의존성 주입하기
Android, iOS 2020. 5. 18. 17:51

이번편에서도 코드를 보면서 학습하길 권한다. conquerex/mvvm-template MVVM 학습과 앞으로 활용을 위한 템플릿. Contribute to conquerex/mvvm-template development by creating an account on GitHub. github.com 우선 MainActivity를 준비하자. 물론 activity_main.xml도 같이 세팅하자. 여기서 DataBinding이 나온다. 하지만 생각보다 단순한 개념이기에 참고 링크만 남겨둔다. MVVM에 데이터바인딩이 필수라고 하는 분이 있고 그렇지 않다고 얘기하는 분도 있었다. 필수라고 하는 분은 의존성이 낮아짐을 근거로 삼고, 필수가 아니라는 분은 디자인패턴적으로 봤을 때 없어도 되기 때문이라고 한다. ..

[MVVM 정복] 4. 어렵고 이해도 잘 안되는 DI, 그리고 Koin
Android, iOS 2020. 5. 18. 17:50

이번편에서도 코드를 보면서 학습하길 권한다. conquerex/mvvm-template MVVM 학습과 앞으로 활용을 위한 템플릿. Contribute to conquerex/mvvm-template development by creating an account on GitHub. github.com DI(Dependency injection)가 "의존성 주입"이라는 의미인 것은 많은 분들이 알고 있다. 그런데 의존성 주입이 무엇이냐고 물어보면 제대로 답할 수 있는 사람이 얼마나 될까? 그래서 알아보았다. DI, 넌 누구냐. 일단 의존성이 무엇인지 알아보자. 두 모듈의 연결, 두 클래스의 관계 의존성이 크다 == 결합도가 높다 '의존성이 큰게 왜??'라는 생각이 들 수 있다. 의존성이 크게 되면 독립성은..

[MVVM 정복] 2. SnackbarMessage, BaseViewModel, BaseActivity
Android, iOS 2020. 5. 18. 17:46

코드는 내 깃헙을 참고하면 된다. 커밋 로그와 블로그 포스팅 제목이 유사하게 따라간다. SnackbarMessage SnackbarMessage는 SingleLiveEvent이다. 앞 포스팅에 있는 그 SingleLiveEvent이다. Snackbar에 보여주고 싶은 메세지가 있다면 이 이벤트의 value에 원하는 메시지를 담으면 된다. class SnackbarMessage : SingleLiveEvent() { fun observe(owner: LifecycleOwner, observer: (Int) -> Unit) { super.observe(owner, Observer { it?.run { observer(it) } }) } } 위의 super.observe는 SingleLiveEvent에 있는 ..

[MVVM 정복] 1. LiveData와 SingleLiveEvent
Android, iOS 2020. 5. 18. 17:44

MVVM에서 데이터가 변경되는 시점에 UI가 변경되도록 하기 위해서 LiveData를 사용한다. 그런데 LiveData의 특성상 시도때도 없이 이벤트를 발생시킬 수 있기 때문에 SingleLiveEvent라는 것을 보통 만들어 쓴다. 여기서는 이 SingleLiveEvent의 용도를 확인해보자. LiveData. Data의 변경을 관측할 수 있는 (데이터가 변경되었을 때 감지가 됨) Data Holder 클래스. (데이터를 가지고 있음) 변경을 감지할 수 있는 이유는 컴포넌트의 생명주기를 LiveData가 알고 있기 때문이다. LiveData는 Observer 패턴을 가지기 때문에 데이터의 변경이 있을 시 콜백으로 받아서 처리할 수 있다. 옵저버 등록과 관련하여 다른 블로그에서 설명한 글을 가지고 와 보..

launchMode도 모르고 액티비티 인스턴스를 관리했다니...
Android, iOS 2020. 4. 19. 21:26

최근에 launchMode에 대해서 알고 있느냐는 질문을 받았다. "음? launchMode? 그게 뭔가요?" "그럼 액티비티 인스턴스는 어떻게 관리했나요?" "......" 생각해보니 내가 그런걸 염두하고 개발을 안했던거 같다. 늦기 전에 지금이라도 알아보자. launchMode로 액티비티 인스턴스 관리하기. 1. launchMode의 용도 우선 공식문서에는 뭐라고 했는지 들여다 보았다. 액티비티를 시작하는 방법에 대한 지침입니다. 인텐트를 처리하기 위해 액티비티를 호출할 때 발생하는 것을 결정하기 위해 Intent 객체에서 액티비티 플래그(FLAG_ACTIVITY_* 상수)와 함께 작동하는 4개의 모드가 있습니다. 항상 느끼지만 공식 문서의 번역은 조금 이해하기 힘들다. 다른 분들의 자료를 참고삼아 ..

하다하다 이제 이미지에서도 Crash가 나타난다. 나원참.
Android, iOS 2020. 1. 15. 17:36

작업을 하다보면 감도 안잡히는 에러 메시지를 볼 때가 있다. 아래 메시지가 그런 종류. // Crashlytics Caused by org.xmlpull.v1.XmlPullParserException: Binary XML file line #11: invalid color state list tag gradient 보자마자 '이게 뭐다냐'라고 생각하며 검색을 해보니... 벡터 이미지(VectorDrawable) 내부에 gradient 문제로 확인 되었다. 안드로이드 버전 7(누가)부터 fillColor 옵션을 지원하기에 그 이전 버전의 디바이스에서 충돌할 수 있다. 아래는 구글 문서에서 안내하는 fillColor 옵션의 설명이다. android:fillColor android:fillColor Speci..

728x90
반응형