일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cleanarchitecture
- Jetpack
- 코딩테스트
- DiffUtil
- 플레이스토어
- coroutine
- 리사이클러뷰
- 안드로이드
- 알고리즘
- Build variants
- Authentication
- Kotlin
- 클린아키텍처
- 뷰
- Flow
- 커스텀뷰
- MVVM
- 컴포즈
- UiState
- sharedFlow
- Android
- Compose
- 파이어베이스
- NavHost
- NavController
- 로그인
- 회원가입
- ListAdapter
- 코틀린
- XML
- Today
- Total
목록분류 전체보기 (53)
Grusie 안드로이드 개발 기술 블로그
Git으로 협업을 진행할 때, 충돌이 일어나는 경우가 빈번하게 존재하였다.그리고 제대로 알고 사용하던 것이 아니라, 커밋 메세지가 깔끔하지 못하다는 점이 있었다.이런 저런 방법들을 고민 해 보다, Git Flow에 대해 보게 되었다.그리고 실제로 적용해보며 느낀 점과, 방법에 대해 얘기해보도록 하겠다. 사실 서로간의 규칙만 잘 정한다면 어떻게 사용해도 되긴 한다. 하지만, 좀 더 유지보수를 편하게 하며, 형상관리의 목적인 버전 관리를 잘 확인하기 위해서 많은 사람들이 고민하여 만들어진 패턴이라고 생각하면 될 것 같다. Git Flow- 브랜치를 나누는 방법에 대한 분류 중 하나이다. main(master) : 서비스를 직접 배포하는 역할을 하는 브랜치feature(기능) : 각 기능 별 개발 브랜치dev..
웹뷰를 활용한 페이지를 새로 만들어 테스트를 완료하고, release버전으로 내부테스트 배포를 하게 되었다.기본 동작은 웹뷰에서 Json을 받아와 Gson 라이브러리를 활용하여 해당하는 모델로 파싱을 해주고, 그 모델을 가공하여, Unity 라이브러리에 전달하는 형태였으나, 어째서인지 배포를 한 뒤 부터 Unity 모듈의 초기화가 실패하는 현상이 발생했다. 원인 분석release버전이기에, 세세한 Log를 보지 못 했고, 로그인 정보를 넘겨줄 때 문제가 있을 것이라는 추측만 할 수 있었다. 로그인 정보가 잘 못 되었나를 고민하였으나 Shared Preferences 같은 경우도, debugging 모드일 때에만 안드로이드 스튜디오에서 볼 수 있었고, release를 debuging 모드로 뽑아서 할까 하..
플레이 스토어에 출시된 앱의 버전 업데이트를 관리 할 때에는 몇 가지 방식이 있다.1. 강제 업데이트2. 선택적 업데이트3. 인앱 업데이트 우선 우리 회사의 경우 사용자 경험에 있어 최대한 강제 업데이트를 시키는 것을 권장하지 않는 주의이다.그렇기에, 크리티컬한 오류가 있는 버전이 아니라면 강제 업데이트를 진행시키지 않는다. 그랬을 때의 로직을 생각해보자.1. 서버 통신을 통해, 강제 업데이트를 진행해야 하는 최소 버전을 받아온다.2. 만약 이 버전보다 낮다면, 강제로 업데이트를 진행하도록 해야한다.3. 이 버전보다 높다면, 플레이스토어의 버전과 비교를 한다. 업데이트가 가능하다면 선택적 업데이트 다이얼로그를 띄워준다.4. 만약 나중에 하기를 선택했을 경우, 1주일 뒤에 다시 다이얼로그를 띄워준다. 이런..
정보처리 기사를 왜 따는가? 사실 정보처리 기사를 꼭 따야하는 이유는 없다. 어디서든 필수는 아니라고 되어있기 때문이다. 실제로 주변에 없는 사람들도 많았으나, 오픈톡방에서 정보처리기사가 필수는 아닌데, 없으면 이것도 없어? 라고 할 정도로 기본으로 탑재되어 있어야 하는 분위기라고 한다. 어쩌다 보니 정보처리 기능사, 정보처리 산업기사, 정보처리 기사 등 모든 자격증을 다 취득하게 되었는데, 그 이유로는 뭐라도 해야겠다 싶은 필자의 불안함으로 생각된다. 필자는 전문대를 졸업하여, 재학중에 정보처리 기능사를, 졸업 후 회사를 다니며 정보처리 산업기사를 추가로 취득하였고, 학점은행제를 통해 정보처리 기사에 대한 응시 자격을 맞춘 뒤 정보처리기사를 보게 되었다. 정보처리 기사 필기 시험은 24.02.17(토)..
리사이클러뷰 단일 체크에 대해 고민해보았다. onBindViewHolder에서 처리를 하였더니, 깜빡임이 발생해 찾았던 방식이 payload였고, 회사 프로젝트에도 적용을 한 적이 있었다. DiffUtil은 리사이클러뷰의 아이템 추가/수정/삭제 등을 진행하여 변경사항을 알릴 때 기존 notifyDataSetChanged 를 사용했을 때에 비해, 성능면에서 좋다는 것만 생각하고 있었으니 조금 더 공부를 해보게 되었다. 기존 노션 페이지에서도 한 번 정리해둔 적이 있으니 참고하면 좋을 것이다.https://grusie.notion.site/6d922ec6b7b746d0aa15a0b9a4a953a5?pvs=4 안드로이드 공부 | Notion이론 공부grusie.notion.site DiffUtil이란?리사이..
기존에 미라클알람 프로젝트를 진행하며 데이터바인딩에 대해 찍먹 정도는 해 본 적이 있다. 그 때는 잘 모르는 상태로 진행하여 코드도 난잡하고 사용하기 힘들었었고, 회사 프로젝트에 사용하려고 해 보았으나, data binding이 패키지명에 대문자가 있으면 에러가 나는 것 같았다. 하필 회사 프로젝트의 패키지명이 대문자로 되어있어 적용을 포기했었던 것 같다. 그 이후로 뷰바인딩만 사용하였고, 컴포즈 공부를 하면서, Data binding을 서서히 잊어갔다... xml의 사용을 줄이기위해 컴포즈로 공부하고 있었는데, 데이터바인딩은 오히려 XML에서 로직까지 사용하여 분리가 불가능 하게 될 것이라는 생각 때문이였다.그러나 이번에 메모리즈 프로젝트를 진행하는데, 기존에 계셨던 분이 데이터바인딩으로 코드를 구현 ..
늘 Coroutine을 사용하여 suspend함수로 레트로핏의 결과를 반환해주고, try-catch {}로 묶어서 에러 핸들링을 하였다.그러던 와중 CallAdapter라는 클래스를 알게 되어서 적어보려고 한다.Retrofit2 빌더 패턴에서, 확장함수를 보다보면, addCallAdapterFactory() 라는 메서드가 존재한다.응답을 받았을 때, callAdapterFactory에서 원하는 타입으로 리턴해주는 형태로 작업을 하기에, 코틀린의 Result를 사용하거나 임의로 만든 sealed class를 사용할 수 있을 것 같다.CallAdapter를 사용했을 경우 통신에 대한 try-catch{} 지옥을 겪을 일이 없어 코드가 깔끔해진다. 사용법CallAdapterclass CustomCallAdap..
의존성 관리를 위해 기존에 사용하던 방식은 buildSrc를 만들어 공용으로 사용하도록 관리하였었다. 얼마전 드로이드나이츠에서 버전 카탈로그에 대한 발표를 들었는데, 저렇게도 관리 할 수 있구나 하는 생각과 함께 직접 한 번 적용해 보려고 한다.https://www.youtube.com/watch?v=zQAGIQzOJcg buildsrc와 version catalog의 차이- buildSrc플러그인들을 작성하기 쉽다.라이브러리 업데이트 정보를 알 수 없다. ( 별도의 라이브러리를 쓰면 해결은 된다. )코드상에서 버전을 하나만 바꿔도 캐시를 무시하고 전체를 다시 빌드한다.- version catalog버전을 깔끔하게 관리할 수 있고, bundle 형태로 묶어서 관리할 수도 있다.라이브러리 업데이트 정보를..