일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- NavHost
- 로그인
- sharedFlow
- UiState
- 회원가입
- 코틀린
- DiffUtil
- 안드로이드
- MVVM
- Flow
- ListAdapter
- Kotlin
- XML
- Authentication
- 알고리즘
- NavController
- cleanarchitecture
- 리사이클러뷰
- Android
- 커스텀뷰
- Jetpack
- Build variants
- 코딩테스트
- 뷰
- 파이어베이스
- 플레이스토어
- 클린아키텍처
- 컴포즈
- coroutine
- Compose
- Today
- Total
목록전체 글 (53)
Grusie 안드로이드 개발 기술 블로그
메세지를 띄우는 방법은 여러 가지가 있다. 토스트로 띄우는 방법, 다이얼로그로 띄우는 방법 등 여러가지가 있겠지만, 이번에는 SnackBar를 활용해서 띄워보도록 하자. SnackBar는 하단에 간단한 메세지를 표현하는데에 사용되는 메세지로, 화면에 국한되어 있다고 생각하는 게 편하다.Toast와 다르게 콜백을 받아 처리할 수 있으며, 간단한 Action을 구현하는 것도 가능하다. 기본 사용법val snackBarHostState = remember { SnackbarHostState() }val coroutine = rememberCoroutineScope()스낵바를 사용하기 위해선, 스낵바의 상태를 확인 할 수 있는 SnackbarHostState가 필요하다.coroutine.launch { s..
회사 프로젝트를 개발하던 중, RuntimeException이 계속 발생했었다. 프래그먼트를 생성하는 부분에서 에러가 발생한 것으로 로그가 보였으나, 테스트 할 때에는 에러가 발생하지 않아 당황했었다. 휴대폰 기종마다 다른 건가? 라고 생각하다가, 에러 양이 많아질수록 조급해져 찾아보다가 오픈채팅방에 질문을 통해 알게 되었다. 프래그먼트는 이런 저런 이유로 재생성이 자주 된다. 회사 프로젝트는 화면 회전을 막아뒀기에 다시 그려질 일이 없다고 생각하였으나, 다크모드로 변경하거나, 폰트 사이즈를 변경하는 등의 동작을 했을 때 화면을 새로 그리면서 RuntimeException이 발생하게 되었던 것이다. 이유로 발생한 이유는 Fragment생성 시에, 액티비티에서 생성자에 파라미터를 넘겨서 생성하였기 때문이라..
이번에 알아 볼 알고리즘은 구현이다. 구현 알고리즘이란? - 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다. 알고리즘 문제를 풀이할 때 구현은 매우 필요하다. 모든 문제를 구현이라고 생각 할 수 있으나, 그 중 구현이 어렵거나 구현에 초점을 맞추는 문제들이 있다. 즉, 풀이를 떠올리기는 쉽지만 소스코드로 옮기기 어려운 문제라고 생각하면 된다. 예시 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정한 기준에 따라 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용해야 하는 문제 알고리즘은 간단한데, 코드가 길어지는 문제 시뮬레이션 문제 완전 탐색 완전탐색 - 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 시뮬레이션 - 문제에서 제시한 알고리즘을 한 단계씩 차례대로..
지난 시간까지 파이어베이스 인증(Auth)을 활용하여, 이메일 회원가입/로그인을 구현하였다.이번 시간부터 파이어스토어에 유저 정보를 저장하고, 가져와 화면에 뿌려주는 것을 해보려고 한다.이전 게시글2024.03.21 - [안드로이드 개발] - [Android] 파이어베이스 이메일 회원가입 - 3 (인증 및 자동 로그인) [Android] 파이어베이스 이메일 회원가입 - 3 (인증 및 자동 로그인)이전 게시글까지 이메일 인증을 구현하였고, 이제는 온전한 회원가입을 진행하기 위해, 이메일과 비밀번호로 진짜 회원가입을 진행하고 자동로그인을 처리하는 것까지 진행해보자. 이 전 게시grusie.tistory.com 파이어스토어 데이터베이스 생성위치를 설정해주어야 하는데, 기본 값으로 하기로 했다. 자세한 위치설정..
안드로이드 상태를 관리하는 것은 Ui와 Event로 나눌 수 있다.필자는 기존에 UiState로만 상태 관리를 하였으나, StateFlow나 LiveData 같은 경우 동일한 State를 방출했을 때, 변화를 감지하지 않기 때문에 문제가 발생하게 되었다.(같은 이벤트 처리)어떻게 해결하면 좋을지 찾아보던 중, Shared Flow를 사용해 EventState를 분리하여 관리하게 되면 문제가 해결 된다는 것을 알게 되었다. 기존 처리 방식- LiveData 혹은 SateFlow사용하여 데이터가 변경되는 값을 감지하고 그에 맞게 뷰를 변경해준다. LiveData를 사용하지 않는 이유- LiveData는 안드로이드 라이프사이클에 맞게 상태를 관찰 할 수 있다는 장점이 있으나, 클린아키텍처 구조와 같이 라이프사..
회사 프로젝트를 개편하려던 중 화면을 불러오는 것이 너무나도 느리기에, 코드를 들여다 보니, 전부 다 동기처리로 되어있었다. 그냥 콜백을 보내고, 다음 함수를 호출하고의 문제가 아니라, 아예 콜백을 보내고? 콜백을 받아와서, 성공했을 때 그 다음 콜백을 요청하는 형태로 구현이 되어있어서.. 경악을 금치 못했다.또한 OkHttp로 구현이 되어있었기에 Retrofit으로 변경하며, 클린아키텍처로 변경하면서 비동기, 병렬 처리에 대해 고민을 하였다. 예전에 suspend 함수의 통신 결과를 받아오기 위해 await()함수를 사용하였던 적이 있다.그 땐 await()가 값을 가져오기 위해 쓰는 것이기에 동기라고만 생각 하고 넘어 갔었다. 여러 개의 서버통신을 비동기로 변경하면서 생긴 고민"비동기로 처리하면, 서..
Retrofit으로 서버통신을 오랫동안 해왔지만, 코드가 없을 때 새로 구현하려고 하면, 시행착오가 조금 필요한 것 같다는 생각을 해서 정리를 해보려고 한다. 파싱하는 방법, 로깅 인터셉터 등 여러 추가 기능들을 구현해야하겠지만, 그냥 기본 Retrofit의 사용법만을 우선 정리 해두려고 한다. Retrofit2 라이브러리OkHttp 라이브러리를 기반으로 구현된된 라이브러리이며, Squareup사에서 만들었다.서버와 Http 통신을 해서 주고받은 데이터를 앱에서 특정 형태로 활용할 수 있도록 하는 라이브러리이다.GET, POST, PUT, DELETE 등을 전달하면 서버에서 처리 후 xml, json, text, rss 등으로 응답을 제공 받을 수 있다. Retrofit 라이브러리 사용법 의존성추가im..
현재 근무중인 회사의 안드로이드 프로젝트는 기존 MVC 패턴으로 구현되어 있으며, Retrofit 같이 여러 곳에서 사용 되어야 하는 객체도 Singleton으로 의존성 주입을 활용하여 되어있지 않다.현재 새로 개발하는 프로젝트들은 필자가 MVVM패턴을 적용하고 있으나, DI는 아직 적용하지 못했던 상태이다.클린 아키텍처를 공부하며 프로젝트까지 진행한 이번 기회에 클린 아키텍처 + MVVM + Hilt를 적용해 볼 예정이다. 우선 클린 아키텍처를 위해, 각 계층들을 추가한다.- data모듈(실질적인 통신)- domain모듈(중개자)- presentation모듈(UI)- DI(DI 및 앱 설정) 기존에 사용했던 프로젝트들을 분리하려고 했으나, 얽혀있는 것들이 너무 많아 모듈로 분리하지 않고, 디렉토리로 ..