서론
요즘 Android Architecture에 대한 내용을 공부하던 중 SAA라는 새로운 아키텍처를 보게 되었다.
Google I/O 2018 에서 언급된 내용으로 한참 지난 지금에서야 알게 된 점에 오늘도 반성중이다 ㅠ
사실 이전부터 Google에서는 Activity보다 Fragment 사용을 적극 권장했기 때문에 Single Activity 아키텍처의 사용을 권장하는 것은 당연하다고 느낀다. SAA에 대한 개념을 가볍게 정리해보려 한다.
SAA란?
SAA(Single Activity Architecure)는 하나 혹은 최소한의 Activity만을 사용하고 나머지 화면은 모두 Fragment로 구성한 구조로, 주로 JetPack Navigation과 함께 사용되는 아키텍처이다.
Single Activity에 대한 내용은 17년도부터 언급된 내용으로 한참 전부터 구글에서 해당 구조에 대한 얘기를 했다.
Single Activity, 액티비티를 하나만 사용하는 이유?
- Activity는 Fragment에 비해 상대적으로 무겁기 때문에 메모리나 속도 방면에서 Fragment를 사용하는 게 이점이 있다.
- 비즈니스 로직을 Fragment 단위로 분리하여 사용 가능하기 때문에 의존성을 줄일 수 있다.
- Activity보다 유연한 UI 디자인을 지원한다.
- Activity Scope 내에서 Shared ViewModel을 사용하여 데이터를 공유 및 전달할 수 있다.
- Intent, Start Activity 등 화면 전환 방법들을 Navigation을 사용하여 단순화할 수 있다.
Single Activity, 단점도 있을까?
- LifeCycle이 더 복잡해질 수 있다.
- Fragment 간의 동작이 비동기로 처리되기 때문에 동기/비동기에 따른 이슈가 발생할 수 있다.
- 프로젝트 설계 단계에서 많은 부분을 고려해야 한다.
마치며
오늘은 정말 가볍게 내가 이해한 Single Activity 아키텍처에 대한 내용을 정리해 보았다.
클린 아키텍처 관련한 포스팅을 작성할 때도 언급했지만, 이러한 방법론이 있는 거지 아키텍처에 정답은 없다고 생각한다. 아키텍처에 대한 개념을 알아두고 프로젝트의 상황에 맞게 사용하는 것이 가장 정답지에 가깝다고 느낀다.
실제로 Single Activity 아키텍처를 적용했을 때, 네비게이션 모듈을 따로 나누는 경우도 있고 기존 멀티 모듈을 유지한 채 프로젝트를 구성하는 등 방법이 다양한 것 같다. 실제 예제 소스를 작성하여 개념에 대한 학습을 진행할 계획이다.
Reference
[Android/Kotlin] Single Activity Architecture(SAA)를 쓰는 이유, 및 적용해보기
Jetpack은 개발자가 관심 있는 코드에 집중할 수 있도록 권장사항 준수, 상용구 코드 축소, 모든 Android 버전 및 기기에서 일관되게 작동하는 코드 작성을 돕는 라이브러리 모음입니다.안드로이드
velog.io
https://velog.io/@iamjm29/Single-Activity-Architecture-SAA-%EC%A0%81%EC%9A%A9%EA%B8%B0
Single Activity Architecture (SAA) 적용기
이번 부스트캠프에서 모글 프로젝트를 진행하면서 Navigation component를 사용하기로 했다. 그러면서 자연스레, “이왕 Navigation component를 사용하는거 Single Activity Architecture로 설계해보자!” 라는 얘
velog.io