기업협업 TIL - 08. MVP 패턴에 대하여

박태환·2021년 9월 13일
0

기업협업 TIL

목록 보기
8/14
post-thumbnail

이번 프로젝트는 팀원들과 상의하여 mvp패턴으로 앱을 개발해보기로 했다.
이 패턴을 이해하기까지의 험난한 과정을 정리하여 적는다.

디자인 패턴?

디자인 패턴은 건축으로 치면 건축공법에 해당하는 것으로 소프트웨어의 개발 방법을 문서로 공식화한 것이다.

소프트웨어 개발 방법에서 사용되는 디자인 패턴은, 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로, 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다. 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다. - 위키피디아

간단한 작업같은 경우에야 굳이 필요가 없겠지만 점점 작업이 복잡해지고 코드가 길어지고 이용자가 많아질 수록 유지보수에대해 신경을 쓰지 않을 수 없다.
하지만 화면을 구성하는 코드와 기능적인 역할을 하는 코드들이 뒤엉켜있다 보면 유지보수가 쉽지 않다.
이런 문제를 해결하기 위해 나온 것이 바로 디자인패턴!
오늘 정리할 MVP패턴을 알기 위해서는 먼저 MVC패턴을 알고 갈 필요가 있다.

MVC패턴

간단하게 Model, View, Control의 약자라고 보면 된다.

  • View

    View는 말그대로 사용자에게 보일 화면을 표현한다. 유저가 무엇을 입력하든 View는 아무것도 알 수가 없고 유저로부터 입력받은 정보는 Controller를 통해 View에 나타나게 된다.
  • Controller

    Controller는 단순하게 View의 변화에만 관여하는셈!
    사용자의 입력에 의해 정의된 Model로부터 정보를 전달받아 View를 선택하는 역할!
  • Model

    그렇다면 Model은 무엇이냐
    Model에서는 데이터를 가지고 그 데이터를 이용한 처리 등을 담당한다.
    Model은 View나Controller의 영향을 받지 않고 독립적이기 때문에 재사용에 용이하다는 장점이 있다.

하지만 이런 MVC패턴에도 단점이 있다.
바로 Model과 View의 의존성..!
View의 갱신을 위해 Model을 신경쓰지 않을 수 없다는 것이다.
이렇게 된다면 규모가 커지고 로직이 복잡해질수록 유지보수가 힘들어진다는 단점이 있다.
또한 시간이 지나면 지날수록 Controller에 많은 코드가 쌓여 비대해 진다는 점도 단점이다.

이런 단점을 극복하기 위해 나타난게 바로 MVP패턴이다!

MVP패턴

MVP 패턴이란 Model, View, Presenter의 첫 글자를 따서 이름이 지어졌다. 뿌리가 MVC패턴이다보니 기본적으로는 MVC패턴과 비슷하지만 MVP는 MVC와는 다르게 UI(View)와 비즈니스 로직(Model)을 분리하고, 서로 간에 상호작용을 다른 객체(Presenter)에 그 역할을 줌으로써 서로의 영향(의존성)을 최소화하는 것에 있다고 한다!
MVP에서 달라진 것은 바로 Cotroller 대신 존재하는 Presenter이다.

Model과 View의 매개체라는 점에서 Controller와 유사하지만, View에 직접 연결되는 대신 인터페이스를 통해 상호작용 한다는 점이 다르다.
뷰에게 표시할 내용(Data)만 전달하며 어떻게 보여줄지는 View가 담당한다.

확실히 이렇게 Model과 View의 결합도가 낮아지니 기능을 추가하거나 수정할 때도 훨씬 확장성도 좋아지고 유지보수에 용이하다.
또한 UI와 DATA 파트를 나누다보니 할 일이 명확해진다는 장점도 있다.


MVC와 MVP 비교!

하지만 이번 MVP모델을 공부하면서 Model을 Usecase와 Repository 두 가지로 나눠서 사용한다는 것을 알게 되었다.
아직 정확하게 이해하지는 못했지만 Model 안에서도 Data를 불러오는 것만을 따로 분리시킬 수도 있다는 정도만 이해했다..!


위 그림에서처럼 일반적인 Model은 가게의 사장님 처럼 주방에 대해 빠삭해야 한다고 할 수 있다.
어떤 원산지를 사용하여 요리를 하는지 알고 있고 주방의 변화가 생기면 그대로 사장님 자신에게 영향이 간다.
반면 오른쪽 Repository를 사용한다면 가게에서 준 메뉴판(interface)을 보고서 믿고 시키면 된다. 요리를 어떤 원산지를 쓰는지, 주방의 변화가 크게 영향을 미치지 않는다.(어디서 데이터를 불러오든 데이터를 불러오는 것 그 자체만 신경쓰면 된다!)

아직 완벽히 이해하진 못했지만 나는 늘 직접 부딪히며 배웠으니까!
작은 물방울이 바위를 뚫는다고 했다..!
아주 작은 물방울이라도 오늘도 한 방울!!💧

참고
MVP 적용해보기 : https://jaeryo2357.tistory.com/71

profile
mekemeke

0개의 댓글

관련 채용 정보