android79 [Android] thread와 함께 알아보는 coroutine, flow에 대한 고찰 이번 고찰의 주제는 coroutine이다.kotlin을 사용했거나, 사용 중인 개발자들에게는 항상 따라다니는 비동기 처리 개념이다.이번 포스팅으로 확실하게 궁금했던 것들을 공부하면서 짚고 넘어갈 예정이다. coroutine이란?coroutine은 thread 안에서 실행되는 일시 중단 가능한 작업 단위이다.하나의 thread에서 여러 coroutine이 서로 thread를 양보해 가며 실행될 수 있다. 그러면 어째서 coroutine이 생겨나게 된 걸까? coroutine은 왜 사용하게 되었을까?thread 기반의 다중 thread 작업의 한계coroutine 이전의 동시성 작업은 모드 thread 기반으로 이루어졌다.thread 기반으로 작업을 수행하게 되면 thread 1의 작업이 진행되는 중에 다른.. 2024. 11. 12. [Android] liveData, stateFlow와 함께 보는 MVVM에 대한 고찰 이번 포스팅에서는 저번 포스팅에서 언급했다시피, clean architecture와 함께 실무에서 반필수적으로 사용되는 디자인 패턴인 mvvm에 대해 공부해서 적어보고자 한다.마찬가지로 공부하면서 참고한 포스팅도 같이 링크로 남겨 놓겠다. MVVM은 무엇일까?MVVM에 관해서는 찾아보면 자료가 많이 나오기 때문에 간단하게 정의해 보면,MVC와 MVP에서 view와 엮이는 의존성을 해결하기 위해 view model을 도입한 디자인 패턴.MVVM은 model, view, view model의 약자다. 여기서 view model과 view는 1 : n의 관계를 가질 수 있다는 특징을 지닌다. MVVM을 왜 쓰는 걸까?mvvm 디자인 패턴은 다음과 같은 장점을 가진다.의존성 최소화view는 view model을.. 2024. 11. 11. [Android] hilt와 함께 보는 clean architecture에 대한 고찰 이번 포스팅에서는 Android 개발에서 왜 clean architecture를 사용하는지, 그리고 내가 clean architecture에 관해서 궁금했던 것들을 공부해서 적어 보고자 한다. 내가 공부하면서 참고한 포스팅도 함께 남길 테니 더한 내용이 궁금하면 확인해 보는 것도 좋겠다. clean architecture의 정의정의는 다른 포스팅에도 자주 언급되기 때문에 간단하게 설명하겠다.clean architecture는 소프트웨어 시스템의 구조를 설계할 때 지켜야 할 원칙과 방법을 정의한 개념.복잡한 소프트웨어 시스템을 보다 관리 가능하고 유지 보수 가능한 형태로 구축하기 위한 지침을 제공한다. 간단하게 요약하자면, 규모가 큰 소프트웨어를 설계할 때 지켜야 하는 구조 같은 거라고 이해하면 될 것 같.. 2024. 11. 8. [Android] ConstraintLayout GuildLine으로 화면 구성하기 부트캠프 최종 팀 프로젝트 기록 12 서론지난 포스팅의 splash screen 구현 이후, 다양한 오류들을 해결하고 있는 중이다.지금까지 로그인에서 로그인 진행 후 main으로 이동하지 않은 오류를 해결하면서 로그인 진행 중 circular progress bar를 띄우는 디테일 작업을 진행하였고,Android 12 이하의 버전에서는 splash screen dependency가 잘 작동하지 않는 문제가 있어서 Activity로 splash screen을 구성하고, 로그인 기능을 약간 손보는 작업을 진행했다.위 2가지의 작업은 포스팅으로 쓰기에는 애매한 감이 있었는데, 이번에 한 것은 포스팅으로 쓰기 좋은 것 같아서 이번에 작성해보려 한다. 이번에는 settings 화면을 구현하였다.myPage에 들.. 2024. 9. 23. [Android] SplashScreen Api를 이용해 로그인 여부 확인 부트캠프 최종 팀 프로젝트 기록 11 서론오늘의 구현 기능은 자동 로그인 기능이다.Firebase Authentication을 사용 중이기 때문에 현재 FirebaseAuth의 currentUser.uid가 null이 아니면 사용자가 로그인되어 있다는 뜻이기 때문에 이 경우에는 MainActivity로 이동하고, 아닐 때는 로그인이 필요하기 때문에 SignInActivity로 이동하게 하는 기능이다.이 기능은 현재 구현이 되어 있지만, SignInActivity의 onStart lifeCycle 함수에 구현되어 있기 때문에 사용자가 이미 로그인을 했어도 SignInActivity를 보고 MainActivity로 넘어가게 되는 아주 사소한 이슈가 있다.이 이슈를 해결하기 위해 Android 12부터 사용.. 2024. 9. 17. [Android] Firebase Google One-Tap login으로 마이그레이션 부트캠프 최종 팀 프로젝트 기록 10 서론이번에 코드 수정 사항을 스캔하다가 눈에 보이는 것을 발견했다.바로 GoogleSignIn, GoogleSignInClient가 deprecated 되어 있는 것을 발견했다. 이와 관련해서 자료를 찾아보다가 Google에 새로 출시한 one-tap sign in이라는 것을 발견했다.이 로그인 방법은 기존의 방법에 비해 다양한 장점을 가진다.한 번의 클릭으로 로그인이 가능하다.새 사용자는 앱 안에서 쉽게 계정을 만들 수 있다.기존의 비밀번호에 의존하는 방식의 로그인이 아니기 때문에 관련 보안 위협을 줄일 수 있다.개발하는 입장에서도 기존의 방식보다 코드가 간소화되어서 편리해진다.위와 같은 장점이 있는데 안 쓸 이유가 없지 않은가?바로 사용해 보자. Google .. 2024. 9. 13. [Android] Kakao Login을 Firebase Authentication과 연결 부트캠프 최종 팀 프로젝트 기록 9 서론지난 포스팅과 연결된다.https://rkdrkd-history.tistory.com/244 [Node.js] Intellij, Vscode에서 Firebase Functions 개발을 위한 Node.js 프로젝트 세팅부트캠프 최종 프로젝트 기록 7 서론현재 kakao 로그인 기능을 구현하려 하고 있다.kakao login을 그냥 구현하는 게 아닌 firebase authentication과 연동해서 사용하려 한다.그러기 위해서는 firebase functiorkdrkd-history.tistory.com 지난 포스팅에는 firebase functions 개발을 위한 node js 환경 세팅까지 진행했다.오늘은 android에서 구현한 firebase funct.. 2024. 9. 12. [Android] runnable, handler를 이용해 현재 열려 있는 앱 감지 부트캠프 최종 팀 프로젝트 기록 6 서론이번에는 내가 맡은 기능의 마지막 기능인 허용 앱에 들어갔을 때, 다른 앱을 실행하게 되면 그걸 감지해서 overlay를 띄워주는 기능을 구현할 것이다.다른 앱을 실행하고 나면, 기존의 화면은 background 상태에서 계속 돌아간다는 점을 이용해서 별도의 Thread를 만들어서 현재 열려 있는 앱의 package name을 불러오는 작업을 진행할 것이다. 허용 앱을 실행했을 때, 다른 앱 실행 감지 기능 구현하기다른 앱 실행 감지를 위해서는 usageStatsManager를 이용해서 특정 기간 내의 앱 실행 기록을 구할 수 있다.실행 기록을 가져오는 함수를 만들고, 그 함수를 별도의 Thread에서 반복시켜서 실시간으로 현재 실행되어 있는 앱의 package.. 2024. 9. 5. [Android] android에서 firestore의 데이터 업데이트 및 countdown timer 사용 부트캠프 최종 팀 프로젝트 기록 5 서론이번에 구현할 기능은 앱에서 다른 허용 앱을 실행했을 때, 사용 시간을 카운트다운 타이머로 측정 후, 우리 앱으로 복귀하면 남은 시간을 fireStore에 업데이트하는 기능을 만들어 보았다. fireStore 데이터 업데이트fireStore 데이터를 불러오기 전에 먼저 카운트다운 타이머를 사용해서 앱의 사용 시간을 구해줄 것이다.먼저 허용 앱을 실행하게 되면, 허용 앱을 여는 동시에 타이머를 작동시켜서 사용 시간을 측정한다. 초기 시작 시간은 각 허용 앱에 설정된 시간(제한 시간)으로 지정한다.허용 앱을 사용하다가 우리 앱으로 돌아오게 되면, 타이머를 멈추고 타이머에 남은 시간을 fireStore에 업데이트한다.허용 앱을 쓰는데 제한 시간이 종료되었는데 우리 앱.. 2024. 9. 3. [Android] clean architecture에 firebase 로직 적용하기 부트캠프 최종 팀 프로젝트 기록 4 서론팀원들과 UI 구성을 마무리 짓고 이제 본격적으로 기능 구현에 돌입했다.내가 맡은 기능은 디톡스 타이머가 작동 중일 때, 실행이 가능한 허용 앱들을 불러와서 정해진 시간만큼만 사용할 수 있도록 구현하는 것이다.정해진 시간만큼 사용하는 기능을 구현하기 전에, 실행이 가능한 앱들을 firestore에서 불러오는 작업을 먼저 진행하겠다. fireStore 로직을 clean architecture로 구현하기clean architecture의 구조는 이 포스팅을 보는 사람들을 다 어느 정도는 알고 있다는 가정하에 간단하게 설명하겠다.clean architecture는 data, domain, presentation 계층으로 나뉘어 있고data에는 데이터를 저장할 data.. 2024. 8. 30. [Android] custom NumberPicker를 string array와 함께 사용하기 내일배움캠프 최종 프로젝트 기록 3 서론어제까지는 BottomSheet의 height를 설정하기 위해 삽질한 것을 포스팅했는데,오늘은 Bottom Sheet에 NumberPicker를 써서 구현한 것을 포스팅해보려 한다.추가적으로 NumberPicker에 string.xml에서 정의한 string array도 함께 사용했다. NumberPicker 구현우선은 NumberPicker에 사용할 전용 Theme를 만들어 보겠다.NumberPicker에서는 Picker의 text의 색과 size 등등 몇 개의 설정이 불가하기 때문에, Theme로 구현해 줘야 한다.textColor와 size 설정은 1, 2번째 줄에서 이루어지고, colorControlNormal은 NumberPicker에서 선택된 항목과 .. 2024. 8. 28. [Android] Android에서 BottomSheetDialogFragment의 높이를 최대 높이로 설정하기 내일배움캠프 최종 프로젝트 기록 2 서론이번에는 UI 개발을 할 차례이다.나는 UI개발에서 마이페이지에 사용하는 bottomSheet들의 UI 구성을 맡았다.그리고 이미 구현되어 있는 bottomSheet 틀을 사용해서 구현할 것이다.sheet 틀은 xml로 이미 구현되어 있고, content 부분만 따로 xml로 구현해서 붙여주는 작업을 진행했다.bottomSheet UI의 height 설정 부분에서 삽질을 했던 과정을 글로 적어 보겠다. BottomSheet를 최대 높이로 설정해서 만들기기존에는 BottomSheet를 최대 높이로 설정해서 띄우려면 BottomSheetBehavior를 사용해야 했다.원래 BottomSheetBehavior를 사용해도 되지만, bottomSheetDialogFrag.. 2024. 8. 27. [Android] Android의 Gitignore 설정으로 commit 제한하기 내일배움캠프 최종 프로젝트 기록 1 서론이제 기획이 어느 정도 마무리되고 본격적으로 개발을 시작한다.프로젝트의 주제는 cosmic detox로, 우주를 콘셉트로 하는 디지털 디톡스 앱을 만들기로 했다.그전에 먼저 초기 세팅을 진행하고 있다. 내가 맡은 초기 세팅은 패키지 구성 및 gitignore 설정, firebase와의 연결이다.그중에서 gitignore 설정 관련해서 포스팅을 남겨 보려 한다.이 포스팅에는 gitignore 설정 및 적용 방법을 적어 보겠다. Gitignore.gitignore 파일은 commit 되는 모든 파일들 중에 특정한 파일들을 commit에서 제외시켜 버리는 역할을 하는 파일이다.gitignore 파일을 이용해 프로젝트에서 안 쓰이는 파일들을 제외시켜서 버전 관리를 용이.. 2024. 8. 26. [Android] RecyclerView의 Infinite scroll 적용하기 (2) 내일배움캠프 앱 개발 심화 팀 프로젝트 서론대부분의 API들은 수많은 검색결과를 불러와야 할 때, 한 번에 불러오는 게 아닌, page query 파라미터를 추가로 이용해서 조금씩 데이터를 불러오도록 처리한다.이런 형식으로 데이터를 불러오는 이유는 많은 데이터를 여러 페이지로 나누어서 로딩 속도를 개선하고 사용성을 좋게 하기 위해서이다.이는 기본적인 내용이긴 하지만 그냥 써봤다. page 파라미터로 나뉘어 있는 검색결과들을 Android에 무한 스크롤을 적용해서 끝없는 데이터를 계속 불러올 수 있도록 만들어 보자. 무한 스크롤무한 스크롤은 우리가 자주 사용하는 instagram, youtube처럼 스크롤을 계속 내려도 데이터가 계속 나오는 것을 뜻한다.무한 스크롤을 구현하기 위해서는 첫 데이터가 re.. 2024. 8. 19. [Android] ViewModel과 UiState를 이용해 상황에 맞는 화면 띄우기 (1) 내일배움캠프 앱 개발 심화 팀 프로젝트 서론이제 본격적으로 부트캠프에서 앱 개발하고 나서 발생한 문제의 해결 과정과 새로 알게 된 기능 정리 및 알고 있던 개념 복습 차원에서 개발 기록 포스팅을 남기도록 하겠다.기능 개발이 끝나고 나서 포스팅을 작성할 것이기 때문에 매일 올라오지는 않는다 :) UiState란?uiState는 자신이 직접 state를 만들어서 현재 앱이 어떤 상태인지 직접적으로 알 수 있게 해주는 역할을 한다.대체로 UiState는 sealed class를 이용해서 구현한다.sealed class SearchUiState { data class Success(val searchResultModel: SearchResultModel): SearchUiState() data ob.. 2024. 8. 16. 이전 1 2 3 4 ··· 6 다음 728x90