[Android] 디자인 패턴 정의 및 종류(MVC,MVP,MVVM,MVI,Singletion,Observer)

[Android] 디자인 패턴 정의 및 종류(MVC,MVP,MVVM,MVI,Singletion,Observer)

안드로이드 앱을 개발할때 여러가지 디자인 패턴을 사용한다.

오늘은 자주 사용하는 디자인 패턴에대해 알아보고, 그 종류와 각각의 특징에 대해 알아볼 것이다.

1) 디자인 패턴 이란?

  • 코드내에서 반복적으로 발생하는 문제해결하기위해 재사용이 가능한 형태로 만든 정형화 해놓은 해결책이다.
  • 주로 클래스나 객체간의 관계를 다룬다.
  • 그렇기 때문에 특정 상황에서 어떤 클래스들이 협력하는지, 각 클래스가 어떤 역할을 하는지를 명확하게 정의한다.

간단하게 말해 코드의 작은 부분에서 발생하는 문제에 대한 해결책을 제시해준다고 보면 된다.

2)안드로이드에서 주로 사용하는 디자인 패턴의 종류

MVC (Model-View-Controller)

img

  • Model : 데이터와 비즈니스 로직을 처리하는 부분이다.
  • View : 사용자에게 보이는 UI부분이다.
  • Controller : 사용자로부터 액션을 받고 처리하는 부분이다. (모델과 뷰 간의 상호 작용을 관리)

  • 장점
    • 구현하기 쉽고 빠르게 작업이 가능하다.
  • 단점
    • Controller/View가 결합되어있어 테스트가 힘들다
    • Model과 View의 의존성이 높다.

MVP (Model-View-Presenter)

img

MVC의 확장으로, 뷰와 모델 간의 직접적인 의존성을 낮추고, 프레젠터를 통해 사용자 인터페이스와 비즈니스 로직을 분리한다.

  • Model : 애플리케이션에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분이다.
  • View : 사용자에게 보이는 UI부분이다.
  • Presenter : View에서 요청한 정보를 가공하여 View로 전달하는 부분이다.

  • 장점
    • Model과 View의 의존성이 없다.
    • Model은 Presenter의 요청만을 수행한다.
  • 단점
    • 필요한 클래스 수가 증가한다.
    • 기능이 추가될수록 분리가 어렵다.

MVVM (Model-View-ViewModel)

img

뷰와 모델 간의 의존성을 줄이고, 데이터 바인딩을 통해 뷰모델이 뷰와 모델을 연결한다. Observe Pattern을 이용해 객체의 변경이 일어날때마다 UI를 갱신한다.

  • Model : 애플리케이션에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분이다.
  • View : ViewModel의 데이터들을 구독하고 있다가, 객체가 변할때 UI 업데이트를 진행한다.
  • ViewModel : Model과 상호작용하며, View에 종속되지않고 1:N 구조를 갖는다.

  • 장점

    • View와 Model이 독립되어 있다.

    • ViewModel에서 View 코드가 없기때문에 UnitTest를 쉽게 할수 있다.

  • 단점
    • 데이터 바인딩이 필수적으로 요구 된다.
    • View에대한 처리가 복잡할수록 ViewModel이 거대해진다.

MVI (Model-View-Intent)

  • Model : intent로 전달받은 객체에 맞추어, 새로운 불변객체를 Model로 생성한다.
  • View : Model의 결과물인 상태를 구독하고 있다가, 변경시 UI 업데이트를 진행한다.
  • Intent : Model에게 앱의 상태를 전달한다.

💡 Intent 앱의 상태를 바꾸려는 의도를 의미한다.

MVI에서 Model에서 호출되는값은 불변하기에, 예상이 가능한 값이어야 한다. ,다만 서버나 데이터베이스에서 값을 가져올경우,값을 예측할 수 없다. 따라서 SideEffect를 통해 제어하게 된다.

💡 부수효과(side effect) 원래의 목적과 다르게 다른 효과 또는 부작용이 나는 상태를 의미한다. 예) 네트워크 통신시, 데이터를 가져오는 함수가 데이터를 못가져올때

compose가 도입되면서 상태에따른 변화가 많아졌기떄문에 더욱이 떠오르는 패턴인것 같다.

  • 장점

    • 하나의 State객체만을 바라보기 떄문에 상태충돌이 일어나기 어렵다.

    • 데이터의 흐름을 파악하기 쉽다.

  • 단점

    • Model Update를 위해 새로운 인스턴트를 끼워넣기때문에,리소스가 낭비될수 있다.

    • 작은 변경에도 intent를 거쳐야 한다.


Singleton Pattern:

애플리케이션 전체에서 단일 인스턴스를 유지하는 패턴으로, 전역 상태 또는 리소스에 접근할 때 사용된다.


Observer Pattern:

객체 간의 일대다 의존성을 정의하여 한 객체의 상태 변경이 다수의 종속 객체에 자동으로 알릴 수 있게 하는 패턴으로, LiveData 등에서 사용된다.


© 2023. All rights reserved.

AgileCatch