Model-View-Controller, MVC는 소프트웨어 디자인 패턴 중 하나로 소프트웨어를 3개의 영역으로 나누고 각 영역에 고유한 책임을 부여함으로써 영역 간의 결합도를 낮추고 소프트웨어의 유지보수성을 높인 디자인 패턴입니다.
구조
MVC는 Model, View, Controller 3개의 영역으로 이루어졌습니다. 각 영역은 고유한 책임을 가집니다.
Model
Model은 데이터의 가공과 비즈니스 로직을 책임집니다. 데이터베이스와 통신하고 변수, 상수 등의 데이터를 관리하며 소프트웨어의 비즈니스 로직을 구현합니다.
이러한 Model은 다음과 같은 특징을 가집니다.
- 사용자에게 필요한 모든 데이터를 가지고 있어야 합니다.
- View, Controller의 정보를 몰라야 합니다.
- 데이터의 갱신이 발생했을 때, 이를 처리하는 방법을 구현해야 합니다.
View
View는 User Interface, UI를 책임집니다. 사용자에게 적절한 화면을 보여주기 위해 Model로부터 데이터를 전달받습니다.
View는 다음과 같은 특징을 가집니다.
- Model로부터 전달받은 데이터를 따로 보관하면 안됩니다.
- Model, Controller의 정보를 몰라야 합니다.
- 화면의 갱신이 발생했을 때, 이를 처리하는 방법을 구현해야 합니다.
Controller
Controller는 Model과 View를 중재하는 책임을 가집니다. Model과 View는 서로 존재를 모르는 상태에서 변경 사항을 외부로 알리고 수신합니다. Controller는 이러한 Model과 View를 중재하며 변경 사항을 서로에게 전달합니다. 즉, 사용자가 소프트웨어를 사용하며 발생시키는 이벤트를 처리하는 역할을 합니다.
Controller는 다음과 같은 특징을 가집니다.
- Model, View에 대해 알고 있어야 합니다.
- Model, View의 변경을 모니터링해야 합니다.
사용 이유
소프트웨어에 기능을 추가하고 수정하는 과정에서 각 기능 간의 결합도가 높아질 수 있습니다. 결합도가 높아지면 신규 기능을 추가하거나 리팩토링하기 어려워집니다. 다른 기능에 어떤 영향을 주게 될지 파악하기 어렵기 때문입니다. 결합도를 낮추기 위해서는 각 기능의 역할과 책임을 적절하게 분리할 필요가 있습니다.
MVC는 데이터 및 비즈니스 로직
과 UI
두 관심사에 대한 책임을 Model, View, Controller 세 영역에 부여했습니다. 데이터의 갱신이나 비즈니스 로직 구현은 Model이 책임지므로 Model 영역에서 필요한 절차를 수행하도록 하면 됩니다. 사용자와 상호작용하는 화면을 구현할 때는 View 영역에서 처리하도록 하면 됩니다. 또한 Model, View 영역 간의 요청을 전달하거나 변경 사항을 통지하는 것은 Controller 영역에서 처리하도록 하면 됩니다.
이를 통해 세 영역의 결합도는 낮아지고 소프트웨어 유지보수성은 높아집니다.
댓글