MVC (Model-View-Controller) 패턴
1. 개념
소프트웨어 디자인 패턴의 일종으로, 사용자 인터페이스 - 비즈니스 로직을 분리하여 시각적 요소와 서버 작업을 서로 영향 없이 운영되어 유지보수가 편리한 어플리케이션을 만들 수 있다.
- 디자인 패턴
- 소프트웨어 개발 차원에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결 '규칙' 템플릿
2. 구성요소
- 사용자가 컨트롤러를 조작
- 컨트롤러가 모델을 통해 데이터를 가져옴
- 데이터를 바탕으로 시각적인 요소를 가미하며 뷰에 표현
- 사용자는 뷰를 통해 데이터를 봄
2.1 모델 (Model)
어플리케이션이 '무엇'을 할지 정의 어플리케이션의 정보 DB, data 처리 로직 컴포넌트
- 어떤 동작을 수행하는 코드
- 사용자 쿼리에 대한 데이터 제공
- 데이터 업데이트
- 상태가 업데이트되면 등록된 '모든' 뷰에 자신의 상태 변화를 알림
- 뷰나 컨트롤러를 직접 참조해서 업데이트를 반영하면 안되고 업데이트 통지 처리 방법만 구현
- 모델은 여러 개의 뷰를 가질 수 있음
2.2 뷰 (View)
사용자 화면에 '무엇'인가를 '보여줌' 데이터 및 객체의 입력, 출력
- 모델에게 쿼리를 보내고 모델로부터 값을 가져와 사용자에게 보여줌
- 뷰는 여러 개의 컨트롤러를 가지고 있음
- 여러 개의 모델에 등록될 수 있음
- 모델의 데이터를 저장해두면 안됨
- 모델로부터 상태 변화 알림이 오면 그에 따라 사용자에게 보이는 화면을 변경하는 방법만 구현
- 모델에 쿼리 보내기
- 화면 업데이트
2.3 컨트롤러 (Controller)
모델이 '어떻게' 처리할지 알려줌, 사용자의 요청을 받아 처리 데이터와 UI 연결
- 사용자가 모델의 상태를 업데이트하기 위해 사용
- 사용자의 요청을 받고, 이를 분석해서 모델과 뷰에 업데이트 요청
- 모델과 뷰가 상태 변화를 알리면 이 통지를 분석해서 각 구성 요소에 통지
- 모델의 mutator 함수를 호출하여 상태를 바꿈
- ** mutator 함수 : 멤버 변수의 값을 수정하는 함수
3. MVC 패턴의 장점
- 애플리케이션 내부의 비즈니스 로직, 사용자 인터페이스, 이 둘을 연결 및 제어하는 컨트롤러 각각의 역할에만 집중하여 개발할 수 있어 효율적
- 비즈니스 로직과 UI의 분리로 가독성이 높아져 유지보수성 증가 확장성, 유연성 증가
- 중복 코드 최소화