[Android] 디자인 패턴 (Design Pattern)

HJTN·2023년 11월 11일
0

Android App 개발

목록 보기
2/5

디자인 패턴이란?


소프트웨어의 구조를 패턴화한 것을 의미하는데, 특정 상황에서 소프트웨어 아키텍처의 공통적으로 발생하는 문제에 대한 재사용 가능한 해결책을 의미한다. 코드를 효율적이고 체계적으로 작성하여 자주 발생하는 오류를 줄이고 유지보수 시 발생하는 비용을 줄이기 위해 사용하는 패턴이다.

Android 디자인 패턴


초기에는 MVC(Model-View-Controller) 패턴을 많이 사용하였고, 이후에 MVP(Model-View-Presenter), MVVM(Model-View-ViewModel) 패턴을 쓰고 있다. 각 디자인 패턴은 저마다의 특징이 있으므로 무엇하나 특출나게 좋다고 할 수는 없고 상황별로 쓰는 것이 좋다고 한다.

MVC (Model - View - Controller)


사용자에 의해 이벤트가 발생하면 Controller에 요청이 발생하고, Model에서 데이터를 가져와서 View에 정보를 뿌려주는 패턴이다.
MVC 패턴 이미지

1. 각 계층의 역할

계층설명
Model앱 내에서 필요한 데이터, 상태, 비즈니스 로직을 저장하고 처리하는 역할
View사용자가 직접 보는 UI를 담당하는 역할
ControllerView와 Model 간의 관계를 설정하고, 앱의 로직을 담당. View의 UI와 Model의 데이터를 업데이트하는 역할. Activity와 Fragment를 포함.

2. MVC 패턴의 흐름

  1. 사용자에 의한 Event 발생
  2. Controller에서 Event 처리 및 Model 업데이트 요청
  3. Model에서 데이터 처리 및 업데이트 후, Controller에 알림.
  4. Controller에서 View 업데이트 요청
  5. View에서 UI 업데이트

3. MVC 패턴의 특징

  1. Controller와 View는 1:N 관계.
  2. Controller는 View에 요청할 뿐이고, UI 업데이트는 View에서 이루어짐.
  3. View와 Model을 완전히 분리하여 테스트에 용이하도록 만듦.
  4. View의 코드가 변경되면 Controller 역시 수정해야하고, Controller에 많은 코드가 집중되다보니 유지보수가 어려움.

MVP (Model - View - Presenter)


코드가 빈번하게 수정되는 경우, View와 Controller의 관계로 인해 Application의 구조가 깨질 위험이 있다. 이를 보완하기 위해 Controller의 역할을 View에서 일부 부담하도록 만든 것이 MVP 패턴이다.
MVP 패턴 이미지

1. 각 계층의 역할

계층설명
Model앱 내에서 필요한 데이터, 상태, 비즈니스 로직을 저장하고 처리하는 역할.
View사용자가 직접 보는 UI를 담당하는 역할. Activity와 Fragment를 포함.
PresenterView와 Model 사이에서 데이터를 처리하고 전달하는 역할. Interface 형식으로 되어있어 View와 독립적이다.

2. MVP 패턴의 흐름

  1. 사용자로 인해 Event 발생
  2. View에서 데이터를 Presenter에게 요청
  3. Presenter는 Model에 데이터 요청
  4. Model는 요청받은 데이터 전달
  5. Presenter가 Model로부터 받은 데이터를 처리하여 View에 전달

3. MVP 패턴의 특징

  1. Presenter가 View와 Model 사이에서 둘을 연결하는 역할을 맡음.
  2. Presenter와 View는 1:1 관계.
  3. Interface로 변경되면서 테스트에 용이.
  4. Presenter에 역할이 집중되면서 성능이 저하되고, 유지보수가 어려움.

MVVVM (Model - View - ViewModel)


마틴 파울러의 Presentation 모델 패턴에서 파생된 디자인 패턴으로, 핵심은 Businesss Logic과 Presentation Logic을 UI로부터 분리시키는 것이다. 또, Data-binding을 사용하여 테스트와 유지보수가 좀 더 쉬워진다.

1. 각 계층의 역할

계층설명
Model앱 내에서 필요한 데이터, 상태, 비즈니스 로직을 저장하고 처리하는 역할.
View사용자가 직접 보는 UI를 담당하는 역할. Activity와 Fragment를 포함.
ViewModelView와 Model 사이에 위치하여 중재하는 역할. View와 Data-binding을 통해 서로 연결함. 데이터 변경이 발생하면 Model을 갱신하거나 가져와서 View에 필요한 Observable 데이터로 가공.

2. MVP 패턴의 흐름

  1. 사용자로 인해 Event 발생
  2. View에서 Command Pattern으로 ViewModel에 Event 전달
  3. ViewModel은 Model에게 데이터 요청
  4. ViewModel에서 응답받은 데이터를 Observable 데이터로 가공하고 저장
  5. View는 ViewModel과 Data-binding으로 연결되어 데이터를 가져오고 UI 업데이트

3. MVP 패턴의 특징

  1. Command Pattern과 Data-binding을 구현
  2. 계층간의 의존성이 없으므로 모듈화 가능
  3. 대형 프로젝트를 위한 패턴이므로 소형 프로젝트에 적합하지 않음.
  4. Data-binding Logic이 복잡해질수록 Debugging이 어려움.

참고

profile
Hello~

0개의 댓글