본문 바로가기

Android

MVP 디자인 패턴이란?

반응형

오늘은 mvp에 대해 알아보려 합니다.

 

왜냐하면!!!? 제가 지금까지 7~8개월을 mvp 패턴을 이용해 만들어 왔지만...

 

아무도 얘기해주는 사람이 없었기에 막 쓰고 있었던것이었던것이었습니다....(선임이나 누가 도와줬으면...)

 

아무래도 스타텁에 다니다 보니 혼자 개발했고, 스터디에서도 혼자 개발하다보니 참 하하하호호호 하네요

 

MVP에 대해 "잘" 알고 넘어가야 MVVM에 대해 이해하기가 편할거 같아 다시 공부하면서 정리해봤던 내용들입니다.

 

 

 

  • MVP : 컨트롤러의 책임에 묶이지 않고도 V와 Activity가 자연스럽게 결합하도록 합니다.

    • Model : "*비즈니스 로직"으로, 내부적으로 쓰이는 데이터를 저장하고 처리하는 역할.
      • 데이터 + 상태 + 비즈니스 로직 입니다.
      • Data를 말함. 단순 데이터가 아닌 데이터를 "관리/수집/수정" 등을 하게 되는 부분이며, 데이터를 Cache해야 한다면, 이 M에서 Cache할 수 있고, 단순 전달만 할 수도 있다. Data의 전반적인 부분을 model에서 담당하고, 네트워크, 로컬 데이터 등을 포함
      • Repository : Remote/Local 을 구분하며, Memory Cache를 포함
      • Remote : 서버를 통한 데이터를 불러온다.
      • Local : 단말기 상의 SQL, Realm 등을 통한 데이터를 불러온다.

    • View : UI, 데이터를 "보여"주거나 "액션", "Lifecycle"을 감지해 P에 보내는 역할.
      • Activity/Fragment가 이제 V의 일부로 간주된다는 것입니다. 따라서 이들이 서로에게 연관되는 자연스러운 현상을 극복할 필요가 없습니다. A가 V 인터페이스를 구현해서 P가 코드를 만들 인터페이스를 갖도록 하는 것이 좋습니다. 이렇게 하면 특정 V와 결합되지 않고 가상 V를 구현해서 간단한 유닛 테스트를 실행할 수 있죠.
      • 사용자의 실질적인 이벤트가 발생하고, 이를 처리 담당자인 P로 전달
      • 완전한 V의 형태를 가지도록 설계합니다. 계산을 하거나, 데이터를 가져오는 등의 행위는 P에서 처리하도록 구현.

    • Presneter : 뷰(View)와 모델(Model) 사이에서 자료 전달 역할
      • 본질적으로는 MVC의 C와 같지만, V에 연결되는 것이 아니라 그냥 인터페이스라는 점이 다릅니다. 이에 따라 MVC가 가진 테스트 가능성 문제와 함께 모듈화/유연성 문제 역시 해결합니다. 사실 극단적으로 MVP를 따르는 사람들은 P가 절대로 어떤 안드로이드 API나 코드라도 참조 해서는 안된다고 주장합니다.
      • V에서 전달받은 이벤트를 처리하고, 이를 다시 V에 전달
      • V와는 무관한 Data등을 가지고, 이를 가공하고, V에 다시 전달하는 역할
      • V와 관련된 것은 절대 없어야 함.

    • Presenter 문제
      • 유지 보수 : C처럼 P에도 시간이 지남에 따라 추가 비즈니스 로직이 모이는 경향이 있습니다. 시간이 흐른 후 개발자는 거대하고 다루기 어려운데다 문제가 발생하기 쉽고 분리 하기도 어려운 P를 발견하게 되죠.
    • View만 존재할 경우 따로 M, P를 만들 필요는 없다.
  • 일반적인 플로우

    1. View에서 (Touch) Event 발생
    2. V → P에 Event 전달
    3. P에서 이벤트 형태에 따라 Cache Data를 가져오거나 M에 요청을 함.
    4. M은 P에서 Data를 요청을 받아 Local이나 Sever에서 Data를 가져온다.
    5. P는 M로부터 Data를 받는다.
    6. P에서 가지고 있는 Data를 기반으로 V에 전달한다.
    7. V에서 화면을 갱신한다.

 

 

 

*비즈니스 로직 : Business logic은 컴퓨터 프로그램의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분을 말합니다. 데이터베이스, 표시 장치 등 프로그램의 다른 부분과 대조되는 개념으로 쓰입니다.

 

 

 

 

 

이해가 가시나요? 즉,

 

Model 은 데이터를 가지고 요래 저래 하는 역할이고

 

Presenter 는 Model 과 View를 연결하는 "다리" 역할,

 

View 는 이벤트를 감지하면 Presenter에게 Model의 데이터를 요청해 가져와 "보여주는" 역할을 하는 겁니다.

 

저는 Presenter에서 데이터를 가공하고 이래저래 하고 Model은 필요한 애들만 가져다 데이터를 요래저래 했었는데..

 

왜그랬나 싶네요 ㅠㅠ 독학은 잘 "이해"하고 넘어가야합니다....! 

 

 

 

전 좀 더 이해하고 바로 MVVM을 정리해보겠습니다!!!

 

모두 화이팅!!!

반응형