소프트웨어의 구조를 패턴화한 것을 의미하는데, 특정 상황에서 소프트웨어 아키텍처의 공통적으로 발생하는 문제에 대한 재사용 가능한 해결책을 의미한다. 코드를 효율적이고 체계적으로 작성하여 자주 발생하는 오류를 줄이고 유지보수 시 발생하는 비용을 줄이기 위해 사용하는 패턴이다.
초기에는 MVC(Model-View-Controller) 패턴을 많이 사용하였고, 이후에 MVP(Model-View-Presenter), MVVM(Model-View-ViewModel) 패턴을 쓰고 있다. 각 디자인 패턴은 저마다의 특징이 있으므로 무엇하나 특출나게 좋다고 할 수는 없고 상황별로 쓰는 것이 좋다고 한다.
사용자에 의해 이벤트가 발생하면 Controller에 요청이 발생하고, Model에서 데이터를 가져와서 View에 정보를 뿌려주는 패턴이다.
계층 | 설명 |
---|---|
Model | 앱 내에서 필요한 데이터, 상태, 비즈니스 로직을 저장하고 처리하는 역할 |
View | 사용자가 직접 보는 UI를 담당하는 역할 |
Controller | View와 Model 간의 관계를 설정하고, 앱의 로직을 담당. View의 UI와 Model의 데이터를 업데이트하는 역할. Activity와 Fragment를 포함. |
코드가 빈번하게 수정되는 경우, View와 Controller의 관계로 인해 Application의 구조가 깨질 위험이 있다. 이를 보완하기 위해 Controller의 역할을 View에서 일부 부담하도록 만든 것이 MVP 패턴이다.
계층 | 설명 |
---|---|
Model | 앱 내에서 필요한 데이터, 상태, 비즈니스 로직을 저장하고 처리하는 역할. |
View | 사용자가 직접 보는 UI를 담당하는 역할. Activity와 Fragment를 포함. |
Presenter | View와 Model 사이에서 데이터를 처리하고 전달하는 역할. Interface 형식으로 되어있어 View와 독립적이다. |
마틴 파울러의 Presentation 모델 패턴에서 파생된 디자인 패턴으로, 핵심은 Businesss Logic과 Presentation Logic을 UI로부터 분리시키는 것이다. 또, Data-binding을 사용하여 테스트와 유지보수가 좀 더 쉬워진다.
계층 | 설명 |
---|---|
Model | 앱 내에서 필요한 데이터, 상태, 비즈니스 로직을 저장하고 처리하는 역할. |
View | 사용자가 직접 보는 UI를 담당하는 역할. Activity와 Fragment를 포함. |
ViewModel | View와 Model 사이에 위치하여 중재하는 역할. View와 Data-binding을 통해 서로 연결함. 데이터 변경이 발생하면 Model을 갱신하거나 가져와서 View에 필요한 Observable 데이터로 가공. |