디자인패턴, 디자인패턴 너무나도 많이 들어보았는데, 딱히 사용하고 있지 않은 것 같은 느낌이 들어서 찾아보니, 이미 잘 사용하고 있었다.(django는 MVC디자인패턴을 사용하고 있었다!!. 찾아본 내용에 대해서 정리)

디자인패턴의 개요 

  • 서로 여러 사람이 함께 개발하기 때문에, 유지보수 하거나, 새로운 기능을 추가하거나 최적화를 하기에 힘든 구조적 결함이 있다.

  • 프로그램등을 개발하는 중에 발생했던 문제점들을 정리 및 특정한 '규약'을 통해 좀 더 쉽고 편리하게 쓸 수 있는 형태로 만든 것

  • 한마디로 코딩 방법론이나, 코딩 컨벤션에 가깝다.

 

MVC 패턴

  • Model, View, Controller

  • User-View-Controller-Model-Controller-View User의 구조

  • 시각적인 부분과 이면의 동작과 제어를 처리하는 부분을 분리하여 서로에 미치는 영향 없이도 응용프로그램을 변경할 수 있도록 한다.

  • django도 MVC패턴을 따르며, django에서 model은 model, View는 template, Controller역할은 View가 한다.

  • 가장 전형적인 OOP구조로서 가장 단순하며, 보편적으로 많이 사용되는 디자인패턴

  • OOP참고 [[번역] OOP를 빨리 잊을 수록 여러분과 여러분의 소프트웨어에 좋습니다 | rinae's devlog](https://rinae.dev/posts/the-faster-you-unlearn-oop-the-better-for-you-and-your-software-kr)

 

 

MVP 패턴

  • Model. View. Presenter

  • MVC와 다르게 컨트롤러 대신에 Presenter가 View와 Model 사이를 중계해주고 있다. 따라서 Model과 View는 서로를 알 필요가 전혀 없이 Presenter만 가리키게 된다. 따라서 View와 Model의 의존성은 사라지게 된다.

  • 모델은 위 MVC패턴과 동일하며 뷰와 프리젠터에서 구성 요소의 변화가 있다.

  • V(View) 기본적으로는 MVC와 같이 화면에 보여지는 요소를 맡는 것은 동일하나 Controller가 사라짐에 따라서 이제 사용자의 입력을 받는 역할을 겸하게 된다. MVC에서 Controller의 역할의 일부를 얻게 되었다고 이해하면 좋다.

  • P(Presenter) View에서 요청한 정보로 Model을 가공하여 View에 전달해주는 부분이다. 본질적으로는 MVC의 컨트롤러와 같지만 뷰에 연결되는 것이 아니라 그냥 인터페이스라는 점이 다르다.

 

MVP패턴의 장/단점

  • 장점 MVC와 달리 View와 Model의 의존성이 사라졌다.

  • 단점 View와 Model 사이의 의존성은 해결되었지만 대신에 View와 Presenter 사이에 높은 의존성을 가지게 되었다. 이는 MVC와 마찬가지로 어플리케이션이 복잡해질수록 View와 Presenter 사이의 의존성이 더욱 강해지고 복잡해진다.

 

MVVM 패턴

  • Model , View, ViewModel

  • VM(ViewModel) 뷰에 필요한 데이터를 준비하고 모델에 필요한 이벤트를 전달한다. 그러면서도 뷰에 종속되지 않는 뷰만을 위한 모델이라고 할 수 있다.

  • 어떻게 뷰와 뷰모델, 뷰모델과 모델간에 의존성이 사라지게 되느냐. 그것은 바로 Command패턴과 Data Binding 덕분인데, 이 패턴과 라이브러리로 인해서 의존성이 완전히 사라지게 된다.

  • Command패턴과 Data Binding은 각각 또 하나의 문서를 할애해서 설명이 필요할 만큼이나 긴 설명이 필요해서 해당 포스팅의 목적과 엇나갈 수 있으므로 간략하게만 짚고 넘어가자.

  • Command패턴은 앞서 설명한 여러가지 디자인 패턴들 중에 하나이며 요청을 객체의 형태로 캡슐화하여 저장, 로깅, 취소를 할 수 있는 패턴이다.

  • Data Binding은 XML에 만든 View들을 자동으로 알아서 만들어주는 안드로이드 라이브러리이다.

  • 요약하자면 여전히 MVP패턴처럼 View를 통해 사용자의 입력이 들어오게 되면 Command패턴으로 ViewModel에 요청한다. ViewModel은 Model에게 필요한 데이터를 요청하고 Model은 응답한뒤 ViewModel에서 다시 가공해서 저장한다. 여기서 View로 다시 안돌려주냐고 할 수 있는데, View는 Data Binding을 통해 자동으로 갱신하게 된다.

 

MVVM 패턴의 장/단점

  • 장점

  1. Command 패턴과 Data Binding을 사용하여 View와 Model, 심지어 View와 View Model 사이의 의존성 또한 없앴다.

  2. 테스트와 모듈화가 쉽다

  3. 뷰와 모델을 연결하기 위해 사용해야 하는 연결 코드를 줄일 수 있다.

  • 단점

  1. View Model의 설계가 쉽지 않다.

  2. 뷰가 변수와 표현식 모두에 바인딩될 수 있어서 시간이 지남에 따라 관계없는 프리젠테이션 로직이 늘어나 유지 관리하기 번거롭다.

 

참고 : [신입 개발자 면접 질문 시리즈](https://www.notion.so/54d624628a634c879cc93d94f54cd2d1#0c4b1ec1ee49475ebebbf3897e5d7818)

'서버' 카테고리의 다른 글

NAS란(나스란)  (0) 2020.06.01
MOUNT란  (0) 2020.06.01
nginx 기본에 대해서 알아보기  (0) 2020.01.20
몽고DB와 NoSQL  (0) 2019.12.04
Webhook과 api의 차이  (0) 2019.12.04

+ Recent posts