본문 바로가기

전체 글

(105)
Kotlin Coroutine Continuation 👩‍💻 오늘의 할 일오늘은 코루틴을 사용할 때 빠질수 없는 suspend 키워드가 조금은 낯선 Continuation에 대해 알아보겠습니다. 본 글은 [DroidKnights 2023] 김준비 - Coroutine Deep Dive - Android 실전편과 코틀린 코루틴의 정석 13장 코루틴 심화를 참고하여 작성하였습니다.1. Suspend 함수는 어떻게 동작할까 ? 코루틴이 suspend 함수를 통해 suspended 상태가 되면 Continuation 이란 것을 사용해 정지된 코루틴을 재개할 수 있습니다. 스레드는 Blocking 상태가 되면 사용중이던 자원을 점유하는데 반해 코루틴은 suspended 상태가 되면 어떤 자원도 사용하지 않으며 다른 코루틴이 자원을 사용할 수 있도록 오픈..
안드로이드 클린아키텍처 에러 핸들링 (부제: 상속을 지양하자) 서론다온길 프로젝트를 진행하며 네트워크 에러처리에 대한 부분을 구현하며 상속에 대한 문제점을 알게 되었습니다. 그 과정을 기록하며 상속의 문제점과 상속을 회피할 수 있는 몇 가지 대안을 알아보겠습니다. 이번 글은 이펙티브 코틀린 36장 "상속보다 컴포지션을 사용하라"를 기반하여 작성됩니다.1. 기존 코드를 살펴보자📌 Domain Layersealed class NetworkError : Throwable(){ abstract override val message: String}data object ConnectError : NetworkError() { override val message: String get() = "서버에 연결할 수 없습니다. \n인터넷 연결을 확인한 후 다시 시..
Google I/O Extended Android in Korea 2024 & GDG상사 짧은 후기 생애 첫 개발자 컨퍼런스유튜브에서 작년 드로이드 나이츠에서 Anemic Domain에 관한 내용을 보고 너무 재미있어서 꼭 개발자 컨퍼런스를 가고 싶었습니다. 우연히 인스타 광고에 Google IO Extended Android 광고를 보게되었고 신나서 메다닥 컨퍼런스를 신청하게 되었습니다. 떨리는 맘에 도착한 현장은 신세계 그자체였습니다. 토스, 카카오, 당근 ... 눈 돌리면 천재분들이 넘치는 현장이 너무 신기했습니다. 그렇게 시작한 컨퍼런스 첫 세션은 안드로이드 스튜디오 새 버전과 기능들에 대한 내용이었습니다. 코알라 새 패치 버전의 기능, 넥스트 버전인 레이디 버그, Gemini 등등 그냥 늘상 내가 쓰던 안스는 안스가 아니었구나 싶었습니다. IDE 새 기능 소개 시간이었는데 시작부터 온갖 신문물..
안드로이드 클린 아키텍처 도메인 레이어 설계 서론 이전 글에 이어서 이번엔 Domain Layer와 Presentation Layer를 설계해 보겠습니다. 클린 아키텍처를 처음 적용하면서 Domain Layer를 설계하는 것이 정말 많은 고민을 하게 해 주었습니다. 도메인 레이어가 의미 있으려면, 정말 다른 플랫폼에서도 재사용 가능할 정도로 치밀하게 비즈니스 로직이 잘 작성되어있어야 하며 그 어떤 외부 참조 없이 순수하고 클린 해야 합니다. 게다가 개인 프로젝트면 모르겠지만, 팀이 있다면 기획자, 서버개발자, 타 플랫폼 개발자가 보기에도 명확하게 짜여있어야 하며 궁극적으로는 도메인 레이어만 보고도 마치 공식문서처럼 해당 서비스의 스펙을 모두 파악할 수 있어야 합니다.   하지만 그렇게 도메인 레이어를 구축하는 건 사실상 불가능에 가깝습니다. 너무 ..
[Android]프로젝트를 클린 아키텍처로 마이그레이션해보자 🧑🏻‍💻오늘의 할 일 오늘은 프로젝트를 하면서 설계한 아키텍처와 의존성 주입에 대해 기록해 보겠습니다. 세상엔 저보다 너무나도 정리를 잘 한 글들이 많기 때문에 이 글에선 클린 아키텍처와 힐트에 관한 기본적인 내용은 아마 다루지 않을 것 같습니다. 대신 Hilt를 사용하면서 알게 된 성능 팁에 관한 내용을 다루겠습니다. 아키텍처를 구성하는 각 구성 요소와 비즈니스 로직을 구현하면서 마주했던 많은 고민들을 기록하면서 좀 더 좋은 아키텍처를 설계하기 위한 발판을 만들어 보겠습니다. 1. 모듈을 나누자 프로젝트를 만들고 가장 먼저 할 일은 클린 아키텍처에 기반하여 모듈을 나누는 일입니다. Presentation과 Data, App은 플랫폼의 의존성을 가져야 하기 때문에 Android Library로, D..
버튼 중복 클릭을 막아보자 (Android ThrottleFirst) 🧑🏻‍💻오늘의 할 일 앞으로 프로젝트를 진행하면서 사용한 기술들과 다양한 이슈들에 대해서 글을 적어볼 예정입니다. 그 시작으로 오늘은 버튼의 중복 클릭을 막는 방법에 대해 소개해보겠습니다. 그전에 저희 다온길 프로젝트에 대해서 소개하겠습니다. 다온길은 다 함께 오는 길이라는 뜻으로, 한국 관광 정보 공사 무장애 여행 API를 사용해 장애인, 노약자, 영유가 가족들이 이용할 수 있는 여행지, 관광지를 소개하는 어플리케이션으로 무장애 여행(Barrier-Free Travel)은 장애인, 고령자, 임산부 등 이동에 제약이 있는 사람들이 불편함 없이 여행을 즐길 수 있도록 배려하는 여행 형태입니다.👨🏻‍🏫 Throttle사실 이전에 스로틀과 디바운싱에 대한 글을 쓴 적이 있었습니다. 디바운싱은 바로 ..
클린 아키텍처가 의존성 역전 원칙을 활용하는 원리 👩‍💻 오늘의 할 일클린 아키텍처에서의 의존성 방향은 바깥에서 안쪽으로 흐릅니다. 그리고 동심원의 가장 안쪽, Entitiy는 외부와의 의존성이 없어야 하기 때문에 경계를 횡단하기 위해선 반드시 의존성 역전 원칙을 적용해야 합니다.  모바일 클린 아키텍처에선 Data Layer에서 Domain Layer로의 의존성을 제거하기 위해서 의존성 역전 원칙을 사용합니다.  오늘은 봐도 봐도 어려운 의존성 역전 원칙이 클린 아키텍처에서 어떻게 의존 관계를 역전시키는지 알아보겠습니다. 🤔의문점 이전에 제가 공부했던 Repository Pattern에선 하나의 데이터에 대해서 하나의 DataSource 인터페이스와 Remote DataBase 와 Local DataBase, 두 개의 구현체로 나누고 Reposi..
클린아키텍처를 지향하는 아키텍처 👩‍💻 오늘의 할 일앱 스쿨에서 최종 프로젝트를 진행하며 너무 좋은 팀원분들을 만나 최종 목표를 클린 아키텍처 적용 및 앱출시를 목표로 하게 되었습니다. 프로젝트를 진행하기 앞서 아키텍처를 먼저 구성하게 되었는데요, 클린 아키텍처를 적용하기 앞서 저를 포함한 모든 팀원분들이 아키텍처에 대한 경험이 많이 없었습니다. 그래서 Repository Pattern부터 하나씩 연습하기 위한 아키텍처를 만들게 되었습니다. 이 과정에서 느낀 경험들을 공유하고자 하며 의존성 주입에 관한 내용은 이전 글을 참조해 주세요.👩‍🏫 나의 아키텍처 설계 원칙모든 구성 요소들, 작은 변수명 하나라도 설계에 대한 이유가 있어야 한다. 앱 초기 설계인 만큼 미래 확장에 대한 가능성을 열어둔다. RetrofitIntance ✅ ..