전체 글
-
Remote 레이어란?Clean Architecture 2025. 8. 3. 20:06
안녕하세요~ 오늘은 데이터 레이어(data layer)에 의존하는 원격 레이어(remote layer)에 대해 알아보려고 합니다! 1. 원격 레이어란?원격 레이어(remote layer)는 원격 서버와 통신하여 데이터를 주고받는 계층입니다. 데이터를 요청하거나, 요청에 대한 응답 처리 및 네트워크 오류 처리를 하게 됩니다. 이때 Retrofit이나 OkHttp같은 네트워크 라이브러리를 사용하여 API 호출을 관리하게 됩니다. 구성요소는 DataSourceImplementation, API Service, Model Mapper, API Factory, Model 이 있습니다. 중요한 구성요소 위주로 하나씩 살펴보겠습니다. 2. 원격 레이어의 구성요소2-1. RemoteDataSourceImplinter..
-
Data 레이어란?Clean Architecture 2025. 7. 27. 19:40
안녕하세요🙌 오늘 UMC x 구름톤 유니브에서 주관한 컨퍼런스에 참여하기 위해 공덕역 창업허브센터에 다녀왔어요. 연사님들로부터 30분씩 총 아홉 분의 강연을 들었는데요. SDK, Coil 라이브러리 외에도 "여러분의 아키텍처 안녕하신가요?" 라는 주제로 밥아저씨의 클린 아키텍처를 강연해주시더라고요. 레이어의 개수보다 의존 관계 및 방향이 중요하다는 점, 엔티티와 유즈케이스를 외부 관심사로부터 분리해야 한다는 점을 말씀하셨습니다. 또한 안드로이드는 compose, hilt/koin(DI), flow, coroutine 등 정형화된 구조를 딥다이브하는게 좋다고 하셨는데요. 공부하는 데에 있어 좋은 동기부여가 될 수 있었던 유익한 시간이었습니다. 오늘은 저번에 이어 클린 아키텍처의 도메인 레이어를 의존하는..
-
Domain 레이어란?Clean Architecture 2025. 7. 20. 21:43
안녕하세요~ 오늘은 클린 아키텍처의 도메인 레이어에 대해 알아보고자 합니다. 먼저 저번에 보여드린 밥아저씨의 클린 아키텍처 그림을 한번 살펴보겠습니다! 밥아저씨의 클린 아키텍처에서 안쪽의 UseCases 와 Entities 가 위치하는 곳이 바로 도메인 레이어로 볼 수 있습니다. 도메인 레이어는 순수 비즈니스 로직과 앱의 핵심 규칙을 정의하는 영역입니다. 다른 어떤 레이어도 의존해서는 안되며, 어떤 외부 변경이 도메인 영역에 영향을 주면 안됩니다. 위의 클린 아키텍처 영역을 6개의 레이어(모듈)로 분리하면 아래와 같습니다. User Interface(UI) 레이어, Presentation 레이어, Domain 레이어, Data 레이어, Remote 레이어, Cache(=Local) 레이어 총 6개의 레이..
-
코루틴을 이해해보자! (기초 3편)Coroutines & Flow 2025. 7. 13. 22:37
안녕하세요~ 오늘은 3편으로 코루틴 스코프, Job 객체, 경량성에 대해 알아보고자 합니다!1. 코루틴 빌더(launch) 는 코루틴 스코프 내에서 호출되어야 한다.import kotlinx.coroutines.*suspend fun doOneTwoThree() { launch { println("launch1: ${Thread.currentThread().name}") // (2) main@coroutine#2 delay(1000L) // 1.0s (suspension point) println("4!") // (7) } launch { println("launch2: ${Thread.currentThread().name}") // (3..
-
코루틴을 이해해보자! (기초 2편)Coroutines & Flow 2025. 7. 6. 20:10
안녕하세요~! 오늘은 저번 1탄에 이어 2탄으로 코루틴에 대해서 더욱 자세히 알아보고자 합니다~!1. Thread.sleep import kotlinx.coroutines.*fun main() = runBlocking { launch { println("launch: ${Thread.currentThread().name}") // (3) launch: main@coroutine#2 println("launch") // (4) } println("runBlocking: ${Thread.currentThread().name}") // (1) runBlocking: main@coroutine#1 Thread.sleep(500) // 500ms = 0.5s p..
-
코루틴을 이해해보자! (기초 1편)Coroutines & Flow 2025. 6. 29. 21:32
안녕하세요 6월 마지막 주말이네요. 벌써 7월이 다가오고 날씨도 요즘 많이 후덥지근해요. 저는 아이스크림을 좋아해서 요즘 거의 맨날 1일 1아이스크림 하고 있어요🍦오늘은 코루틴에 대해서 알아보겠습니다! 코루틴을 배워야 하는 이유?혹시 앱을 사용하다가 화면이 그대로 멈추고 어떠한 클릭에도 반응하지 않아서 짜증났던 경험이 있으셨나요?이 현상은 메인 스레드라고 불리는 UI 스레드가 다른 요인에 의해 멈추어서 나타나는 것인데요. 네트워크 요청과 같은 비교적 무거운 작업을 메인 스레드에 하게 되면 앱이 멈추는 경우가 발생할 수 있습니다. 이를 해결하기 위해서는 무거운 작업을 UI 스레드가 아닌 백그라운드에서 처리해야 하는데, 이때 필요한 개념이 바로 코루틴(Coroutine) 입니다. 따라서 안드로이드 앱이 끊..
-
채팅 기능 구현하기(with 챗봇)Android 2025. 6. 22. 21:44
안녕하세요~ 일요일 주말 저녁이네요. 요즘 낮엔 더운데 저녁엔 바람이 불어서 산책하기 좋은 것 같아요 😆오늘은 챗봇과 함께 채팅을 하는 기능을 한번 알아보고자 합니다. 참고로 제가 제목 옆에 괄호로 'with 챗봇' 이라고 한 이유는 다른 실제 유저랑 채팅하는 경우도 있기 때문인데요. 이 부분은 추후에 한번 다뤄보겠습니다!채팅 기능 원리채팅 기능의 기본적인 원리는 바로 리사이클러뷰 (RecyclerView) 입니다. 특히 리사이클러뷰에서 뷰타입을 여러개 사용하는 Multi-viewType RecyclerView 가 핵심입니다. 채팅 기능 구현1. UI (XML 기반)첫 번째로, UI 를 작성합니다. RecyclerView 를 배치한 다음에 하위에 사용자가 직접 채팅을 칠 수 있는 대화창을 만들면 됩니다..
-
Bottom Sheet Dialog, Slider, ProgressBarAndroid 2025. 6. 8. 22:06
안녕하세요~ 오늘은 유저 인터페이스(UI) 에 관련된 요소 3가지를 다뤄보려고 합니다 🫠1. Bottom Sheet Dialog화면 아래에서 위로 슬라이드 되어 올라오는 창으로, 부가적인 내용을 사용자에게 제공될 때 사용됩니다. 전체 화면을 덮지 않고 일부만 덮어 효율적이고 직관적으로 화면을 구성하기 좋습니다. 구현 방법부터 알아보겠습니다! 먼저 루트 레이아웃을 FrameLayout 기반인 CoordinatorLayout 으로 해줘야 합니다. bottom sheet dialog 와 관련된 레이아웃은 따로 작성하여 포함시키기 위해 include 속성을 사용합니다. // @layout/bottom_sheet_dialog // ... 첫 번째로, layout_behavior..