오늘은 안드로이드의 디자인 패턴에 대해 공부해보았습니다.
처음 안드로이드를 시작하며 간단한 공부용 프로젝트만 했을 때는 기능 구현에만 초점을 맞추어 구현에 급급하였지만 다시 돌아서 보니 기능 구현도 물론이고 만드는 앱의 성능에 대해 생각하며 많은 데이터나 리소스를 효율적으로 생각하기 위해 Architecture에 대해 찾아보고 공부하게 되었습니다.
디자인 패턴이란?
- 객체 지향 프로그래밍을 설계할 때 자주 발생하는 문제에 대해서 피하기 위해 사용되는 패턴을 의미합니다.
- 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책입니다.
ex) 생성, 구조, 행위 패턴 등...
아키텍처 패턴이란?
- 소프트웨어의 구조를 패턴화 한 것을 의미합니다.
- 프로그래밍 시 발생하는 다양한 문제상황에 대한 해결책입니다.
ex) MVC, MVP, MVVM...
두 패턴의 차이점
가장 처음으로 접하는 패턴으로 Model, View, Controller 3가지로 구성되어 있습니다.
- View에 의존적이지 않기 때문에 재사용이 가능합니다.
- 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보를 통해서 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가·제거·수정할 수 있습니다.
ex) 사용자가 만든 Class 등, DB, Web의 Resource 등
- 사용자에게 보여질 UI를 담당합니다.
- Model에서 받아온 데이터를 보여줍니다.
ex) xml...
- 모델의 변화에 따른 적용 가능한 명령을 추가·제거·수정할 수 있습니다.
- 사용자의 입력에 따라 모델이나 뷰를 처리한다.
ex) Activity, Fragment...
View와 Model을 분리하고 서로 간에 상호작용을 Presenter에서 그 역할을 해줌으로써 서로 간의 의존성을 줄여주는 특징을 가지고 있습니다.
MVC와 동일한 역할을 수행합니다.
- MVC와 동일한 역할을 수행합니다. 여기에 Activity/Fragment가 View에 포함됩니다.
- View를 관리하는 interface의 구현을 통해 MVC에서 하기 힘든 뷰 테스트가 가능해집니다.
MVC의 컨트롤러 역할을 수행하지만 View에 전혀 연결되어 있지 않고 단지 인터페이스라는 차이점이 존재합니다.
Android에서 데이터 바인딩을 사용하는 MVVM은 더 쉬운 테스트 및 모듈성이라는 장점과 View + Model을 연결하기 위해 작성해야 하는 Glue 코드의 양을 줄입니다.
View의 개발을 비즈니스 로직 또는 Model로부터 분리시켜서 뷰가 어느 특정한 모델 플랫폼에 종속되지 않도록 해줍니다.
MVC와 동일한 역할을 수행합니다.
- MVC, MVP와 같이 사용자에게 보여질 UI를 담당합니다.
- ViewModel을 관찰하여 UI를 갱신한다.
- 기본적으로 View와 연결되어 있지 않습니다.
- View - ViewModel : 사용자와의 뷰의 상호작용(클릭, 키보드 등작 등)을 수신하여 이에 대한 처리를 View와 ViewModel을 연결하고 있는 데이터 바인딩을 통해 서로간을 연결합니다.
- Model - ViewModel: 사용자의 데이터의 변경이 발생하는 경우 데이터를 가져오거나 갱신 한 뒤 View에게 전달하여 사용자에게 전달하는 역할을 수행합니다.
Android에서는 View에 해당하는 xml파일과 데이터를 연결하여서 하나로 묶는 작업을 의미합니다.
바인더는 뷰 모델과 뷰의 동기화를 위해 상용구 로직을 작성을 하지 않으므로 코드를 최소화 할 수 있습니다.
이렇게 아키텍처 패턴에 대해 공부해본 것들을 적어 보았습니다.
이론에 대해 공부한 것을 바탕으로 실전 코드에서도 장점과 단점을 파악하여 사용을 잘 해보는 것을 목표로 열심히 하겠습니다.
참고자료
realm 안드로이드 아키텍처 패턴
감사합니다. 이런 정보를 나눠주셔서 좋아요.