본문 바로가기

Android Architecture

(7)
MVVM에서 MVI로 오늘은 최근 제가 가장 관심 있는 MVI에 대해 이해해 나가는 첫 번째 여정이 될 글을 작성하려 합니다. 제가 MVI를 공부하게 된 계기는 특정 강의에서 MVI에 관한 강의를 듣고 나서 코드의 가독성과 흐름을 파악하기 굉장히 좋다고 느꼈기 때문입니다. 이전에 수행했던 다온길 프로젝트에서 제가 가장 아쉬운 점은 ViewModel에서의 상태관리 코드에 대한 흐름을 파악하기가 너무 복잡했다고 느꼈습니다. 그래서 MVI를 적용하면 이런 문제를 해결할 수 있지 않을까?라는 가정하에 MVI를 공부하기 시작했습니다. 해당글에서 계속해서 언급되는 프로젝트의 코드는 여기서 확인하실 수 있습니다. GitHub - chanho0908/DaOnGil_CleanArchitecture: 다온길 프로젝트 클린 아키텍처(Hilt) ..
Android MVI를 알아보자 새로운 프로젝트를 들어가기전에 MVI를 공부하기 위해 해당 글을 작성하게 되었습니다. 새로운 프로젝트는 Compose를 사용해 진행할 예정입니다. 제 스스로 생각해도 아직 기존 방식의 안드로이드 개발도 정말 많이 부족하지만 Compose를 사용해야겠단 생각이든 몇번의 계기가 있습니다.  첫번째로 컨퍼런스였는데요, 이제는 안드로이드 컨퍼런스에서 컴포즈는 빼놓을 수 없는 주제인 것 같습니다. 하지만 저는 컴포즈에 대한 지식이 전무했고 선배 개발자분들의 소중한 발표들을 이해하지 못하는 것이 너무 아깝다고 느껴졌습니다.  두번째로, 이전 프로젝트에서 겪은 문제점들 때문입니다. 컴포즈를 사용할 때 굳이 MVI를 사용하지 않아도 구현 할 수 있습니다. 아니, MVI를 사용하지 않고 태초의 방식으로 컴포즈 개발을 한..
클린 아키텍처가 의존성 역전 원칙을 활용하는 원리 👩‍💻 오늘의 할 일클린 아키텍처에서의 의존성 방향은 바깥에서 안쪽으로 흐릅니다. 그리고 동심원의 가장 안쪽, Entitiy는 외부와의 의존성이 없어야 하기 때문에 경계를 횡단하기 위해선 반드시 의존성 역전 원칙을 적용해야 합니다.  모바일 클린 아키텍처에선 Data Layer에서 Domain Layer로의 의존성을 제거하기 위해서 의존성 역전 원칙을 사용합니다.  오늘은 봐도 봐도 어려운 의존성 역전 원칙이 클린 아키텍처에서 어떻게 의존 관계를 역전시키는지 알아보겠습니다. 🤔의문점 이전에 제가 공부했던 Repository Pattern에선 하나의 데이터에 대해서 하나의 DataSource 인터페이스와 Remote DataBase 와 Local DataBase, 두 개의 구현체로 나누고 Reposi..
클린아키텍처를 지향하는 아키텍처 👩‍💻 오늘의 할 일앱 스쿨에서 최종 프로젝트를 진행하며 너무 좋은 팀원분들을 만나 최종 목표를 클린 아키텍처 적용 및 앱출시를 목표로 하게 되었습니다. 프로젝트를 진행하기 앞서 아키텍처를 먼저 구성하게 되었는데요, 클린 아키텍처를 적용하기 앞서 저를 포함한 모든 팀원분들이 아키텍처에 대한 경험이 많이 없었습니다. 그래서 Repository Pattern부터 하나씩 연습하기 위한 아키텍처를 만들게 되었습니다. 이 과정에서 느낀 경험들을 공유하고자 하며 의존성 주입에 관한 내용은 이전 글을 참조해 주세요.👩‍🏫 나의 아키텍처 설계 원칙모든 구성 요소들, 작은 변수명 하나라도 설계에 대한 이유가 있어야 한다. 앱 초기 설계인 만큼 미래 확장에 대한 가능성을 열어둔다. RetrofitIntance ✅ ..
객체지향의 꽃 다형성과 의존성 주입 👩‍💻 오늘의 할 일오늘은 객체지향의 특징인 다형성이 안드로이드의 의존성 주입 관계에서 어떤 역할을 하는지 알아보겠습니다. 내용은 제가 프로젝트에서 사용한 코드를 바탕으로 작성하며 DI 같은 의존성 주입 라이브러리는 사용하지 않았습니다. 👩‍🏫 다형성다형성은 말 그대로 다양한 형태를 가질 수 있는 성질입니다. 객체지향에선 이를 Interface를 통해 구현합니다. 인터페이스는 상속받은 클래스가 해야 할 일을 미리 명세하고 Class에선 Interface를 상속받아 실제로 해야 할 동작을 구현합니다. 이를 통해 Interface를 상속받는 Class마다 고유한 형태와 특징을 가질 수 있습니다.interface Animal { fun makeSound()}class Dog : Animal { ..
FireBase 의존성 주입 생각해보기 👩‍💻 오늘의 할 일오늘은 지난 글에서 개선점으로 꼽았던 불필요한 DataSource에 대한 의존성 분리와 실제 사용 코드에서 UseCase를 한 번 만들어보겠습니다. 또한 지난 프로젝트에서 사용했던 코드를 리뷰하면서 필요한 의존성을 왜 ? 어떻게 ? 주입을 했을까에 대한 생각을 적어보려 합니다. 물론 DI 라이브러리는 사용하지 않았지만 먼저 의존성 주입이란 무엇일까에 대해 알아보고 가겠습니다.👩‍🏫 의존성 주입이란 ?의존성이란, 어떤 대상이 참조하는 객체나 함수를 의미합니다. 다음 코드와 같이 Car Class에서 Engine( ) 클래스의 인스턴스를 생성하면 Car는 Engine에 의존하게 됩니다. 이때, Car Class는 Engine 인스턴스를 생성하는 책임을 갖고 있으며 Car Class..
Android Repository 패턴 👩‍💻 오늘의 할 일멋쟁이 사자처럼에서 진행한 팀 프로젝트를 진행하면서 처음으로 Repository 패턴을 사용해 봤습니다. 개인 프로젝트에서도 Repository를 사용하긴 했지만 제대로 공부하다 보니까 제가 잘못 사용 중인걸 알게 되었습니다. 앞으로 클린 아키텍처를 공부하는 데 있어서 큰 발판이 된 경험이 되었기 때문에 한번 정리해 보겠습니다.👩‍🏫 Repository 패턴이란?Repository는 ViewModel에서 DataSource에 접근할 때 직접 DataSource에 접근하는 것이 아니라  Repository를 통해 데이터를 관리하고 접근합니다. 이를 통해서  ViewModel은 단순히 UI 상태(State)를 관리하고 비즈니스 로직을 처리하는 데 집중할 수 있으며, 데이터 액세스..