파고들기 ?
안드로이드 개발을 하면서 내가 사용하는 기술을 파고드는 파고들기 카테고리를 추가했다.
왜냐하면 내가 사용하는 기술들이 어떻게 활용되는지, 어떤 원리로 이루어지는지 등 파고들어 해석한다면
보다 기술들을 효율적으로 사용할 수 있을 것 같았기 때문이다.
파고들기의 첫 번째 이야기! Android Architecture Pattern에 대해서 다뤄보자.
안드로이드를 공부하다보면 MVC, MVP, MVVM, MVI 이라는 키워드를 자주보게 된다.
최근에는 MVI 패턴이 안드로이드에서 주목을 받기 시작했는데, 아직까지는 그래도 MVVM패턴을 많이 사용하고 있다.
MVVM패턴을 자주 사용하더라도 다른 패턴은 어떠한 형식으로 구현하고, 어떠한 특징이 있는지 한 번은 정리해야겠다고 다짐했었다.
다른 패턴들의 장단점을 이해하고 있어야 제대로 사용할 수 있을거라 생각했기 때문이다.
따라서!!!
오늘은 파고들기 첫 번째!!!
MVC, MVP, MVVM 패턴에 대해 파고드는 시간을 가져보자!!
[MVC]
위 그림처럼 Model, View, Controller 세 파트로 나눠진다.
Model - 데이터와 비즈니스 로직이라고 불리는 앱의 ui와 관계 없는 부분을 담당한다.
예를 들어, 로그인 정보와 그를 판단하는 로직이 위치하게 된다. -> 앱의 두뇌와 같다.
View - 사용자에게 보여지는 ui화면이다. xml파일이 View에 속하게 된다.
Controller - 외부에서 입력받은 전달을 처리해서 표시할 부분을 나타낸다.
뷰와 모델 사이의 컨트롤타워, 외부에서 전달받은 입력을 처리해서 뷰의 내용을 갱신한다.
특징
- Model과 View가 완전히 분리되므로 Model은 쉽게 테스트가 가능하다.
- Controller가 안드로이드에 종속되기 때문에 테스타가 어려워진다.
- 안드로이드 특성상 액티비티가 View 표시와 Controller 역할을 같이 수행해야 하기 때문에 두 요소의 결합도가 높아진다.
- 많은 코드가 Controller로 모이게 되어 액티비티가 비대해지는 현상이 발생한다.
이러한 문제를 극복하기 위해 MVP가 등장했다.
[MVP]
위 그림처럼 Model, View, Presenter 세파트로 나눠진다.
Model - 컨트롤러에서의 Model과 동일하다
View - Presenter참조가 생긴다. Controller와 다르게 온전한 뷰로 간주된다.
Presenter - 컨트롤러와 같은 역할을 하지만 뷰에 참조를 직접 거치지 않고, interface를 통해 연결을 시도한다.
뷰로부터 액션을 전달받고, 모델로부터 데이터를 취득해서 뷰에 전달까지 한다.
특징
- View와 Model 사이의 데이터 흐름이 사라지고 Presenter가 중간에서 데이터 흐름을 제어한다.
- 인터페이스를 추가로 구현해야 하기 때문에 구현비용이 올라가게된다.
- View와 Presenter가 1:1로 대응해야 하기 때문에, 앱이 커질수록 두 요소의 의존성이 강해지게된다.
[MVVM]
Model - 위와 동일한 역할을 한다.
ViewModel - View를 참조하지 않기 때문에 ViewModel과 View와 1:N 관계를 가지게 된다.
따라서 중복되는 코드를 ViewModel에 묶어서 줄일 수 있게 되었다.
View - 데이터바인딩을 통해 ViewModel로 받은 데이터를 표시하게된다. 뷰를 참조하진 않지만 observe데이터를 통해 view를 갱신한다.
특징
- View와 Model사이에 의존성이 없으며, ViewModel도 View에 의존성을 가지지 않는다.
- 참조는 View -> ViewModel -> Model 순으로 단방향만으로 일어난다.
그럼 정답은 무엇일까?
어떤 패턴을 사용하는가에 정답은 없다. 구글에서도 필수사항이 아니라, 권장사항이라고 되어있다.
구글에서는 다음과 같이 AAC(Android Architecture Components)를 활용해서 안드로이드 앱 아키텍처에 맞추어 개발하라고 권장하고 있다.
위 그림은 Android Architecture Components를 활용해서 MVVM 패턴의 핵심 가치를 구현한 패턴이다.
다음 글에서는 AAC에는 무엇이 있으며, 이를 어떻게 활용하면 좋을지에 대해서 포스팅해야겠다.!!!
'Android > 파고들기' 카테고리의 다른 글
[Android/파고들기] 2화 Android Architecture Components(AAC) (0) | 2022.09.13 |
---|