이 내용은 Android Developer내용을 읽어보면서 정리한 내용이므로, 더 자세한 내용을 알고 싶으면 공식 홈페이지에서 읽으면 됩니다!.!
우선 내가 생각했던 아키텍쳐라 함은 MVVM이니 MVI이니 MVC니 .. 하는 것들이었는데, 이런 것들도 매우 중요하겠지만, 왜 이러한 아키텍처를 고려하여 만들어야 하는가가 주된 이 글의 주된 목적인 것 같다.
Android Mobile App
우선 안드로이드 앱의 환경에 대해서 얘기하면서 시작한다.
1. 우리가 잘 하는 컴퓨터 내의 프로그램과 다르게 안드로이드 어플의 경우는 다양한 진입경로가 있다. 액티비티, 브로드캐스트, 등등 4대 컴포넌트가 있고
2. 안드로이드 OS에 의해서 메모리 관리에 의해 사용자의 의지와 무관하게 임의로 종료가 될 수 있다.
그래서 -> 이 Android Component가 Data나 상태에 대해서 책임을 가지는 구조로 설계한다면, 문제가 생길 수 있다.
액티비티나 프레그먼트 등의 Component들은 사용자의 의지와 관계없이 새로 만들어지거나, 회전등의 동작에 의해서 새로 만들어질 수 있다. 이러한 상황이 왔을 때 데이터를 위와 같은 Component들이 가지고 있다면 이미 로드하였던 데이터를 다시 복원하기 위해서 다시 데이터를 요청하거나 그 UI의 이전 상태를 유지하기가 힘들 수 있다.
그러면 이 Data나 State는 어떻게 어디에 저장하고 관리를 하는가가 아키텍처의 구조설계의 큰 관심사가 된다. (내 생각)
안드로이드 디벨로퍼에서 말하는 일반적인 아키텍쳐 규칙
1. 관심사 분리, 관심사 분리!!! 관심사 분리,
나처럼 안드로이드 개발에 초보인 개발자도 많이 들어봤을법 한대. 이게 하나의 큰 Class를 통해 구현하는 것이 아닌 세분화하고 책임을 분리하여 테스트와 변화에 유연한 프로그래밍이 되도록 해준다.
너무 잘 정리된 내용을 올립니다.
https://velog.io/@seanlion/soc1
나는 첨에 어플 만들면서, Activity에서 Firebase와 통신을 통해서 실시간 스냅샷을 받는 채팅어플을 만들었었는데, 이 과정에서 LifeCycle관리에 미숙해서, Fragment가 시작될 때마다 새로운 스냅샷 리스너가 붙어서 한 번에 동일한 채팅이 어러번 뷰에 그려지는 경험을 해서 그런지, 이러한 UI Layer에는 정말 가볍게 만들어야 한다는 생각이 박혔다.
2. 데이터 모델에서 UI 도출하기
UI에 표시되어야 하는 데이터를 데이터 모델에서 가져오라고 한다. 그게 사실 너무 당연한 말이라서 무슨 말을 하고 싶은가 고민을 하게 되었는데, 아직도 무슨 말을 하고 싶은지 모르겠다.. 여기서 MVVM에서 Model을 말하고 있는가 싶기도 한대..
혹시 더 알게 되면 작성해야겠다.
권장 앱 아키텍처 규칙
앱의 테스트와 매니징을 보다 쉽게 할 수 있도록 도와주는 안드로이드 권장사항으로, 경험상으로 개발을 하다 보면 결국엔 안드로이드 디벨로퍼가 하는 말이 맞았기에 처음부터 숙지하고 개발을 하는 게 맞는 거 같다.
개발을 하는 앱마다 차이점이 있을 수 있고, 자신만의 아키텍처에 따라 변형을 해야 될 수 있음.
기본적으로 2개 이상의 레이어가 존재하여야 한다.
각각 레이어의 설명은 다른 게시글을 통해서 정리해야겠다.
1.UI Layer
2. Domain Layer
3. DataLayer
위의 각각의 레이어는 종속 항목이 필요함.
그러한 종속 항목 삽입은 DI를 통해서 하자!.
( KMM을 통해 동시 개발을 한다면 Android Library인 Hilt의 사용이 어렵다고 들은 거 같은데..
그때는 어떻게 해야 할지 고민해봐야겠다.)
서비스 로케이터 방식도 있는데 이는 Hilt와 다르게 하나하나 라이프사이클을 지정해 줘야 하고 관리해 줘야 하는 불편함이 있어서
Hilt를 쓰는 게 좋겠음
https://doojuns-ordinary.tistory.com/96
'안드로이드 읽어보기 > 5. Android Architecture' 카테고리의 다른 글
4) Data Layer / Android Architecture 어떻게 해야하는가? (0) | 2022.04.19 |
---|---|
3) Data Layer 워밍업 / 안드로이드 아키텍쳐 (0) | 2022.04.19 |
Android Architecture은 어떻게 해야할까? (2) UI Layer (0) | 2022.03.16 |
MVI에 대해서. (0) | 2022.03.16 |
MVVM이 무엇인가??? (0) | 2022.03.16 |