용어 정리 UseCase : 유스 케이스(Use case)는 UML(통합 모델링 언어)의 행위자(액터)와 액터가 요구하여 시스템이 수행하는 일의 목표이다. Domain : 인터넷 주소, (지식·활동의) 영역; (책임의) 범위 Domain Logic: Business Logic Area로 이해하면 될 것 같다. Entity : 독립체 / DataBase 테이블의 논리적 구조 Clean Architecture에서의 Entity는 Api에서 받은 원시 그대로의 데이터 객체 (DTO)로 보면 된다. 당연히 MVVM을 처음 접하시는 분은 이해가 안가실 겁니다. 저는 처음엔 MVC 패턴과 ViewModel 만을 사용한 MVVM 패턴을 비교해보기 위해 개인 프로젝트를 시작했었습니다. 국가 정보를 가져와서 리스트뷰에 ..
Android 버튼에 Ripple Effect를 주는 방법에 대해서 알아보도록 하겠습니다. 먼저 결론부터 말해보자면, 2가지 방법을 추천합니다. 1) MaterialButton, MaterialCardView 를 사용하는 방법 (Android Support Design 라이브러리에서 제공) 2) xml을 사용하는 방법 앱 개발을 해보면서 적용해본 버튼 종류들과 Ripple 효과를 적용한 코드를 살펴보겠습니다. 1. 텍스트만 들어가 있는 버튼 필수 속성들은 다음과 같습니다. text: 버튼 문구를 지정합니다. backgroundTint: 백그라운드 색상을 지정합니다. (background 아님을 주의) rippleColor: Ripple Effect 색상을 지정합니다. cornerRadius: 모서리의 둥..
안드로이드를 개발하다 보면, 다양한 Animation 효과를 내고 싶어서 구글링 하다보면 너무 다양한 API들이 있는 것을 확인할 수 있습니다. 그래서! 그것을 정리해보고자 합니다. 가장 처음 등장한 API 순으로 정리해 보겠습니다. 1. View Animations (android.view.animation) Api 1부터 존재해온 가장 오래된 방식으로, 현재는 Deprecated 가 되려고 한다. (실제로 스튜디오에서 Deprecated가 뜨지는 않음) 렌더링 방식: 안드로이드의 모든 뷰가 그렇듯이 measure -> layout -> draw 방식을 거친다. 불행히도, Animation은 Draw 단계에서만 실행된다. 즉, Deferring rendering 도 불가능하고, 실제로 버튼의 위치를 바..
* 기존에 dataBinding { enabled = true } 가 활성화 되지 않았던 프로젝트에서 Binding 클래스로 전환시에 주의사항! 자동으로 만들어주는 Binding 클래스는 xml 파일을 만들면서 같이 만들어 준다. 그런데, dataBinding 옵션을 켜지 않은 상태에서 만들어 놓았던 xml 파일은 Binding 클래스를 생성해 주지 않았기에 삭제하고 다시 생성해야만 Binding 클래스가 만들어진다. (이거때문에 반나절의 삽질 시간이 허허) 출처 https://codelabs.developers.google.com/codelabs/android-databinding/#0 Android Data Binding Congratulations! You completed the codelab, ..
다른 앱에서 접근 불가능한 고유 앱 영역. (다른앱과 공유 안된다.) * 사용 함수 getFilesDir() : 앱과 고유하게 연결된 파일 시스템의 디렉터리를 표시하는 File 개체를 반환 getDir(name, mode) : 앱의 고유한 파일 시스템 디렉터리 내에 새 디렉터리를 생성하거나 기존 디렉터리를 엽니다. getCacheDir() : 앱과 고유하게 연결된 파일 시스템의 캐시 디렉터리를 표시하는 File 개체를 반환 이 디렉터리를 임시파일용으로 정기적으로 지워야하고, 디스크 공간이 부족해지면 시스템에서 알아서 삭제한다. * 사용자에게 받아야 할 권한 종류: 없음 * 예시 코드 fun saveInternalStorage(context: Context, fileName: String, bitmap: ..
1. Concat Concatenate : '사슬 같이 잇다' 라는 뜻 A Task와 B Task 가 있다면, A -> B 순으로 작업을 진행한다. val observer1: Observable = Observable.create { emitter -> GlobalScope.launch { delay(1000) Log.i("test_log","obs 1") emitter.onNext("1") emitter.onComplete() } } val observer2: Observable = Observable.create { emitter -> GlobalScope.launch { delay(1000) Log.i("test_log","obs 2") emitter.onNext("2") emitter.onComp..
https://m.post.naver.com/viewer/postView.nhn?volumeNo=6721006&memberNo=34635212 빨리 써먹는 RxJava와 Android [BY 부스트코스] SUMMARYRxJava 와 Android Reactive Programming 은 최근 2년간 유행어처럼 번져 나간 ... m.post.naver.com 간단하게 RxJava란 무엇일까? => '비동기 처리를 효과적으로 할 수 있게 도와주는 라이브러리' 라고 보면 된다. 내가 RxJava를 사용하게 된 이유는, Retrofit api 통신에서 여러 api 작업이 끝나는 시점을 catch 해야 하는데, 성공 시점에 차례차례로 api 들을 호출해야 하는 안좋은 구조를 개선하기 위해서이다. map() : 데..