[개발지식] MVC 패턴

박예슬·2022년 6월 8일
0

MVC 패턴

  • 모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.

  • MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

  • 위의 그림처럼 사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다.

  • MVC 에 기반을 둔 몇 가지 다른 디자인 패턴으로 MVVM (모델-뷰-뷰모델), MVP (모델-뷰-프리젠터), MVW (모델-뷰-왓에버) 가 있다.


왜 MVC 패턴을 사용?

  • 사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤, 이 3가지로 구성되는 하나의 애플리케이션을 만들면 각각 맡은바에만 집중을 할 수 있게 된다. 공장에서도 하나의 역할들만 담당을 해서 처리하면 더 효율적이듯이 여기서도 마찬가지이다
  • 서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고 그렇게 애플리케이션을 만든다면, 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 된다
    * 유연성 : 클라이언트의 새로운 요구사항에 대해 최소한의 비용으로 보다 유연하게 대처할 수 있는 것을 뜻함
    * 비즈니스로직 : 프로그램의 논리구조

Model, View, Controller

Model

  • Model은 Data와 애플리케이션이 무엇을 할 것인지를 정의하는 부분으로 내부 비즈니스 로직을 처리하기 위한 역할을 한다.
  • 즉, 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 연관된 비즈니스 로직을 처리하는 역할을 한다.
  • 데이터 추출, 저장, 삭제, 업데이트 등의 역할을 수행한다.

    Model 의 규칙
    - 사용자가 편집하기를 원하는 모든 데이터를 가지고 있어야 한다
    - View나 Controller에 대헤서 어떤 정보도 알지 말아야 한다
    - 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다

View

  • View는 사용자에게 보여주는 화면(UI)
  • 사용자와 상호작용을 하며 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 한다
  • MVC에서는 여러개의 View가 존재할 수 있다.
  • Model에서 받은 데이터는 별도로 저장하지 않는다.

    View 의 규칙
    - Model이 가지고 있는 정보를 따로 저장해서는 안된다
    - Model이나 Controller와 같이 다른 구성요소들을 몰라야 한다
    - 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 한다
    - Model과 View는 서로의 존재를 몰라야 한다

Controller

  • Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 한다
  • 즉, Model이 데이터를 어떻게 처리할지 알려주는 역할을 한다
  • 사용자로부터 View에 요청이 있으면 Controller는 해당 업무를 수행하는 Model을 호출하고 Model이 업무를 모두 수행하면 다시 결과를 View에 전달하는 역할을 한다

    Controller 의 규칙
    - Model이나 View에 대해서 알고 있어야 한다
    - Model이나 View의 변경을 모니터링 해야 한다


참고 링크
https://velog.io/@seongwon97/MVC-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80
https://developer.mozilla.org/ko/docs/Glossary/MVC
https://m.blog.naver.com/jhc9639/220967034588

profile
공부중인 개발자

0개의 댓글