CS/Software Engineering

[Software Engineering] MVC

콩스프 2022. 12. 10. 22:12
  • MVC (Model-View-Controller)사용자 인터페이스로부터 비즈니스 로직을 분리
  • 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 스타일의 아키텍처
  • 사용자 인터페이스를 담당하는 계층의 응집력을 높일 수 있음
  • 여러 개의 다른 UI를 만들어 그 사이에 결합을 낮출 수 있음

 

 

응용프로그램을 서로 상호작용하는 세 가지의 논리적인 구성요소로 나눔

 

 

 

 

Model

  • 데이터와 해당 데이터와 연관된 작업을 관리함
  • 데이터의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보
  • 통보를 통해 뷰는 최신의 결과를 보여줄 수 있음
  • 컨트롤러 모델의 변화에 따른 적용 가능한 명령 (추가, 제거, 수정)을 내릴 수 있음
  • MVC를 다르게 구현한다면 통보 대신 뷰나 컨트롤러가 직접 모델의 상태를 읽어 오기도 함

 

View

  • 데이터가 사용자에게 표시되는 방법을 정의하고 관리함
  • 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어 오는 역할을 함

 

Controller

  • 사용자와의 상호작용 (EX 키보드 입력, 마우스 클릭)을 관리하고 이를 View와 Model에 전달
  • 모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있음
    EX) 워드 프로세서에서 문서 편집을 담당하는 부분
  • 관련된 뷰에 명령을 보냄으로썸 모델의 표시 방법을 바꿀 수 있음
    EX) 문서 스크롤

 

 

장점

  • 느슨한 결합, 확장성
    각 컴포넌트의 결합이 약해 다른 부분에 영향을 주지 않고 수정할 수 있음

  • 다수의 다른 뷰
    하나의 모델을 위해 다수의 다른 뷰를 쉽게 제공할 수 있음
    데이터와 비즈니스 로직이 분리되어 코드 중복이 적음

  • 비동기
    비동기 기술을 이용하여 애플리케이션을 빠르게 로딩할 수 있음
    개발자가 각 컴포넌트를 빠르게 개발할 수 있음

 

 

단점

  • 복잡도
    컴포넌트의 분리로 인하여 매커니즘 이해를 위한 복잡도가 올라갈 수 있음

  • 비효율성
    데이터 모델과 인터랙션이 단순할 경우 MVC 모델을 사용하는 것 자체가 비효율적일 수 있음

  • 각 컴포넌트 구현을 위한 여러 가지 기술에 대한 이해가 필요함