본문 바로가기

android

(39)
[배달의민족2] 클론코딩 - 4. 약관 상세 화면(Domain 레이어) 안녕하세요! 허접 샴푸입니다. 이번 편은 약관 상세 화면입니다. 글이 매우 길어지는 것 같아 Domain 레이어에 대해서만 먼저 설명하도록 하겠습니다. [만들고자 하는 화면] 1. 이용약관 화면 2. 과거 약관을 선택할 수 있는 하단 팝업 화면 [필요 사전 지식] 1. 안드로이드 2. 코틀린 * 일단 사전 지식이 없더라도 따라 만들면서 부족한 점은, 인터넷 찾아보면서, 학습하시면 됩니다. [내용] 1. ViewModel, ViewModelFactory 2. MVVM, MVI 디자인 패턴 3. ViewPager2 4. UI (Event + State), State Pattern 5. Flow, Observable Pattern 6. Fragment간 통신 7. Clean Architecture, Andro..
[배달의민족2] 클론코딩 - 3. 약관 상세 화면(Data 레이어) ㄹ안녕하세요! 허접 샴푸입니다. 이번 편은 약관 상세 화면입니다. 글이 매우 길어지는 것같아 Data 레이어에 대해서만 먼저 설명하도록 하겠습니다. [만들고자 하는 화면] 1. 이용약관 화면 2. 과거 약관을 선택할 수 있는 하단 팝업 화면 [필요 사전 지식] 1. 안드로이드 2. 코틀린 * 일단 사전 지식이 없더라도 따라 만들면서 부족한 점은, 인터넷 찾아보면서, 학습하시면 됩니다. [내용] 1. ViewModel, ViewModelFactory 2. MVVM, MVI 디자인 패턴 3. ViewPager2 4. UI (Event + State), State Pattern 5. Flow, Observable Pattern 6. Fragment간 통신 7. Clean Architecture, Android..
[배달의민족2] 클론코딩 - 2. 약관 동의 화면 안녕하세요! 허접 샴푸입니다. 이번 편은 먼저 약관 동의 화면입니다. [만들고자 하는 화면] 1. 권한 동의 화면 2. 이용약관 화면(일부 설정만) [필요 사전 지식] 1. 안드로이드 2. 코틀린 3. ViewBinding * 일단 사전 지식이 없더라도 따라 만들면서 부족한 점은, 인터넷 찾아보면서, 학습하시면 됩니다. [내용] 1. ViewModel 2. MVVM, MVI 디자인 패턴 3. ViewPager 4. UI (Event + State), State Pattern 5. Flow, Observable Pattern [시작] 그림, 색상 등과 관련한 리소스 관련 파일은 모두 맨 아래 나와있는 Github에서 확인할 수 있으니 따로 설명을 넣지 않았습니다. 1) 패키지 스트럭쳐 수정 - 기존 ui ..
[배달의민족2] 클론코딩 - 1. 스플래시 화면 안녕하세요! 허접 샴푸입니다. 오랜만에 다시 시작하고자 합니다. 처음부터 끝까지 한번 제대로 만들어보도록 하겠습니다. 이번 편은 먼저 스플래시 화면과 권한 체크를 하는 화면입니다. [만들고자 하는 화면] 1. 인트로 화면 2. 권한 동의 여부 다이얼로그 3. 권한 체크 팝업 [필요 사전 지식] 1. 안드로이드 2. 코틀린 3. Android Jetpack 4. 코루틴 * 일단 사전 지식이 없더라도 따라 만들면서 부족한 점은, 인터넷 찾아보면서, 학습하시면 됩니다. [목표] 1. Fragment 및 ResultListener 2. Jetpack Navigation 3. Permission check [시작] 1) Gradle 설정 - build.gradle (Module: app)에 위와 같이 ViewMo..
[Coroutines 마스터] Coroutine Cancellation 상세 처리 안녕하세요! 허접 샴푸입니다. 오늘은 Coroutine Cancellation 처리에 대해서 자세하게 다루어 볼까 합니다. [문제점] 전 포스트에서, job.cancel()을 통해 실행 중인 Coroutine을 취소하였는 데 취소된 상태로 화면이 남아있었습니다. 취소가 되었다면 다시 실행이 가능토록 해야 하는 데 말이죠. 그렇다고 job.cancel() 이후에 onStop() 오버라이드 함수 내에서 Button을 다시 Enabled 하고, TextView를 다시 세팅한다는 것이 가독성도 떨어지고 유지보수에도 매우 힘들 것으로 판단됩니다. 그럼 어떻게 처리해야 할까요? 방법은 다양하겠지만 제가 생각하는 좋은 방법을 말씀드리도록 하겠습니다. [개요] Coroutine의 경우 실행 중인 Coroutine이 취..
[Coroutines 마스터] Coroutine Cancellation 기초 안녕하세요! 허접샴푸입니다. 오늘은 Coroutine Cancellation에 대해서 매우 짧고 간단한 글을 작성해볼까 합니다. [질문] 돌고 있는 Coroutine을 어떻게 취소시킬 수 있을까요? - 예제를 같이 봐봅시다. [코드] 이전 포스트와 같은 코드이며, 단순히 runTime() 함수 내에서 실행이 끝나면 Toast를 띄우도록 하였습니다. [실행화면] [문제점] 위 실행화면을 보면, 홈 버튼을 클릭하여 바탕화면으로 이동을 하였음에도 불구하고, 앱 내의 Toast가 띄워집니다. 이러면 Ux적으로 문제겠죠? 홈 화면으로 화면 전환을 하였으면 해당 작업은 취소가 되어서 Toast가 띄워지면 안 되는데 말이죠. [방향] 이를 해결하기 위해 Coroutine을 Cancel 해보도록 합시다. 물론, Cor..
[Coroutines 마스터] 흔히 하기 쉬운 실수(CountDown Timer) 안녕하세요! Coroutine을 사용할 때 있어서 흔히 하기 쉬운 실수에 대해서 예제와 함께 설명드리도록 하겠습니다. [예제 화면] 단순하게 TextView 2개, Button 1개로 화면을 구성해보았습니다. 아래 코드를 보면 알겠지만, Button을 클릭하면 5초 동안 타이머를 TextView에 (남은 초) 보여주며 타이머가 끝나면 "Ended" 문구를 다른 TextView에 출력합니다. [코드] Dispatchers.Main.immediate을 사용하였으며 runTime()이라는 suspend 함수를 만들어, seconds가 0이 될 때까지 1씩 차감하여 화면에 남은 초를 출력합니다. [실행화면] 무언가 이상하지 않나요? 전 포스트에서 Dispatchers.Main.immediate을 사용하면 순서가..
[배달의 민족] 따라만들기 11-1편(주문내역 화면) 안녕하세요 허접샴푸입니다! 항상 오랜만입니다... 오늘은 주문내역 화면을 간단하게 만들어보고자 합니다. (ViewPager2, TabLayout, Fragments) [배민 화면] 1. fragment_order.xml에 ViewPager2, TabLayout 및 레이아웃 수정 위와 같이 코드를 작성할 경우, Design Tab을 보시면 위 그림과 같이, tab_layout, pager이 생성된 것을 확인할 수 있습니다. 참고로 기존 TabLayout의 경우, TabIndicator의 폭이 해당 탭의 가로 최대 크기로 정해져 있습니다. 그래서 이것을 해제하기 위해 app:tabIndicatorFullWidth="false"로 설정하였으며, 인디케이터는 해당 탭의 각 탭 아이템 문자열 길이만큼의 폭을 가지..