2019. 9. 28. 18:14ㆍAndroid
#오늘의 개념:
Android Architectrue Pattern
이 글은 안드로이드 공식 홈페이지에서 소개한 App Architecture Guide를 바탕으로 작성되었습니다.
Architecture Pattern
- 코드의 설계. 즉, 개발 시 코드를 어떤 구조로 짤 것이냐.
- 꼭 써야만 하는 것은 아님.
- 현재는 구글에서도 아키텍쳐 사용을 권장
Architecture Pattern 사용 이유 (쓰지 않는다면?)
- 하나의 액티비티/프래그먼트 파일 내에 수 많은 UI logic & 비즈니스 logic 등이 다 섞여있음
- 그럼 해당 액티비티가 재시작될 경우, 모든 로직 역시 새로 시작해야 함.
- 코드가 복잡해지고 길어지게 됨 ==> 가독성이 떨어짐.
- 파일 내 구조 파악이 힘들어짐.
- 유닛 테스트 힘들어짐.
- 유지보수 힘들어짐.
- 휴대기기는 리소스가 제한되어 있으므로, OS에서 새로운 앱을 위한 공간을 확보하도록 언제든지 일부 앱 프로세스를 종료해야 할 수 있음. 이러한 이벤트는 직접 제어할 수 없기 때문에 앱 구성요소에 앱 데이터나 상태를 저장해서는 안 되며 앱 구성요소가 서로 종속되면 안 됨. ==> 아키텍처 패턴 필요!
일반적인 Architecture의 원칙
1. Seperation of Concerns(관심사의 분리, SoC)
관심사의 분리란, 프로그램을 관심사 별로 쪼개서 가능하면 한 번에 한 가지 걱정만 함으로써 프로그램 개발과 유지보수 시의 복잡성을 줄이자는 것이다.
Activity 또는 Fragment와 같은 UI 기반의 클래스는 UI 및 운영체제 상호작용을 처리하는 로직만 포함해야 한다. 이러한 클래스를 최대한 가볍게 유지하여 많은 수명 주기 관련 문제를 피할 수 있다.
2. Model에서 UI 만들기
Model은 앱의 데이터를 처리하는 요소로, 앱의 구성요소와는 독립적이기 때문에 생명주기에 영향을 받지 않음.
지속적인 Model을 권장하는 이유 :
- Android OS에서 리소스 확보를 위해 앱을 제거해도 사용자 데이터가 삭제되지 않음.
- 네트워크 연결이 없어도 앱이 계속 작동함.
구글의 권장사항
1. Activity, Service, Broadcast receiver와 같은 앱의 진입점을 데이터 소스로 지정하지 말 것.
2. 앱의 다양한 모듈 간 책임이 잘 정의된 경계를 만들 것.
네트워크에서 데이터를 로드하는 코드를 코드 베이스의 여러 클래스나 패키지 전체에 분산하면 안 됨. 마찬가지로 데이터 캐시와 데이터 결합 등 여러 개의 관련 없는 것들을 동일한 클래스에 정의하면 안 됨.
3. 각 모듈에서 가능하면 적게 노출할 것.
4. 각 모듈을 독립적으로 테스트하는 방법을 고려할 것.
5. 다른 앱과 차별되도록 앱의 고유한 핵심에 초점을 맞출 것.
반복적인 상용구 코드는 Android architecture 구성요소와 기타 라이브러리를 통해 처리함으로써 시간 낭비하지 말자.
6. 가능한 한 관련성이 높은 최신 데이터를 보존할 것.
이렇게 하면 기기가 오프라인일 경우에도 사용자가 앱을 사용할 수 있음.
7. 하나의 데이터 소스를 단일 소스 저장소로 지정할 것.
앱에서 이 데이터 부분에 액세스해야 할 때마다 데이터가 항상 단일 소스 저장소에서 제공되어야 함.
Architecture Pattern 사용의 단점
- 해당 패턴을 사용함으로써 여러 개의 파일을 생성해야 하고 파일 구조가 복잡해질 수 있음.
예) 사용자의 프로필 정보를 보여주는 기능을 만든다고 할 때 필요한 클래스는(MVVM패턴을 사용한다고 가정) UserProfileViewModel(), UserProfileActivty(), UserProfileRepository(), User() 등이 필요.
App Architecture Pattern의 종류
1. MVC
2. MVP
3. MVVM
4. RIBS
5. SVC
등등.. 정말 많은 패턴들이 존재한다.
이 패턴에 대해서는 다음 글에서 알아보기로 ... ^^
참조
https://developer.android.com/topic/libraries/architecture
'Android' 카테고리의 다른 글
Fragment에 대하여 - (1/2) (0) | 2020.03.01 |
---|---|
[Android] DI(의존성 주입)과 Koin에 대하여 (0) | 2019.11.15 |
[Android]Android Architecture Pattern 에 대하여 - (2) MVVM (0) | 2019.10.08 |
[Android] 앱 성능 및 속도 개선 방법 (0) | 2019.09.21 |
[Android] Paging Library 에 대하여 (0) | 2019.09.14 |