https://www.youtube.com/playlist?list=PLam6bY5NszYN6-a1wt7yRISWfmYPdkbMu Android App Development | Notes App | Android StudioHello, in this tutorial series we are going to build an android app called: Notes App. This tutorial series is going to be a FREE complete Android developmen...www.youtube.comChirag Note App을 클론 코딩해 보았습니다.사용 기술스택구분원본리펙토링언어JAVAKotlinUIxmlxml디자인패턴MVCMVVM아키텍처 패턴패키징클린아키텍처DI없음..
1. Retrofit의 반환형 Call, Response, Flow 중 선택이번 프로젝트에서는 Gson을 이용하여 Json 응답을 처리했습니다. 하지만 Retrofit에서는 이 응답을 Call 형태로 반환하고, 이에 맞는 콜백 인터페이스를 통해 응답을 처리하는 방법과, Response 자료형으로 받아 try-catch 문으로 해당 함수를 실행하는 방법이 있습니다. 이와 유사하게, List 형태로 데이터를 가져온 후, flow 스코프에서 try-catch로 처리하여 결과를 Flow 형태로 전달하는 방법도 가능합니다.Retrofit 결과를 처리하는 방법은 크게 세 가지로 나뉩니다. 이 중 멀티모듈 클린 아키텍처에서 적절한 방법을 찾았는데, Call을 사용하는 경우 데이터 레이어에서 콜백을 처리하면서 도메인이..
1. Clean Architecture 구조 문제이전의 Planfit 코드와 다르게 이번에는 Repository를 만들었습니다.이전에는 Repository를 따로 만들지 않고 UseCase만으로 구현했기 때문에, 구조에 대한 깊은 고민을 하지 않았습니다. 하지만 이번에 Repository를 구현하고 UseCase의 인터페이스를 분리한 후, 그 구현체를 Data Layer에 두고 사용하다 보니 보일러플레이트 코드가 생기고, 이런 방식에 대해 의문이 들기 시작했습니다. 그래서 Clean Architecture에 대해 다시 찾아보면서, 제가 구조를 잘못 만들었다는 것을 깨달았습니다. Clean Architecture에서는 Repository가 여러 데이터 소스(API, DB 등)를 관리하고, UseCase는 ..
https://www.youtube.com/watch?v=9aoUe0gPljYTicket Booking app을 클론 코딩해 보았습니다. 사용 기술스택구분원본리펙토링UIxmlxml디자인패턴MVCMVVM아키텍처 패턴패키징클린아키텍처DI없음Hilt통신Firebase RealtimeDatabaseFirebase RealtimeDatabase이미지 로딩glideglide오픈소스 라이브러리chip-navigation-bar(ismaeldivita),BlurView(Dimezis)chip-navigation-bar(ismaeldivita),BlurView(Dimezis) 과정해당 프로젝트는 유튜버분이 단순 화면만 구현하기 위해서 그런지 유지보수를 도와주는 컨벤션이라든가 deprecated 된 함수를 쓴다든가 Act..
1. StateFlow를 사용하여 Splash화면에서 알맞은 화면으로 navigation을 하거나 대기하는 역할을 수행해야 되는데 화면의 이동이 원할이 되지 않았습니다. 이전 코드@HiltViewModelclass PlanfitSplashViewModel @Inject constructor( private val getPlanfitLoginType: GetPlanfitLoginType,) : ViewModel() { private val _isLoginFlow = MutableStateFlow(LoginEvent.UnChecked) val isLoginFlow: StateFlow get() = _isLoginFlow fun checkLoginState() = viewM..
https://www.acmicpc.net/problem/15655 15655번: N과 M (6) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 고른 수열은 오름차순이어야 한다. 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연..
https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제..
여러 뷰들을 사용하다 보면 background를 설정해 놓고 필터처럼 색만 바꾸고 싶을 때가 있습니다. 이럴 때 쓰이는 속성인 BackGroundTint라는 속성값이 있습니다. 필자는 해당값을 xml이아닌 코틀에서 바꿔야 되는 상황을 격었습니다. 이러한 코드들을 찾아보니 viewStateCircleItem.backgroundTintList = when (data.isAvailable) { true -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.stateGrean)) else -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.gray..
이번에 프로젝트를 하게 되면 Room을 이용해 DB를 적용해 보았습니다. 처음에는 이러한 구조로 entity들을 설계하였습니다. 이렇게 만들려고 하니 Room에서 외래키의 연결이 잘못돼있다면서 787 에러를 보여줬습니다. 위의 구조의 경우 순환 참조가 일어납니다. 모든 테이블이 연결돼있으므로 참조할 수 없게 되는 현상이 생깁니다. 그래서 해당 참조를 끊어줘야 합니다. 이관계에서는 사실상 과정테이블의 경우 budgetNum은 필요가 없습니다. 편의를 위해 만든 것일 뿐 해당 과정이 어떤 가계부에 속해있는지는 부모인 카테고리를 따라 올라가다 보면 가계부를 찾을 수 있습니다. 변환시킨 DB 구조입니다. 이 구조를 코드로 만들면 @Entity( tableName = "BUDGET", ) data class Bu..