MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴으로 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다.
이러한 "관심사 분리"는 더 나은 업무의 분리와 향상된 관리를 제공합니다.
MVC에 기반을 둔 다른 디자인 패턴으로는 MVVM (모델-뷰-뷰모델), MVP(모델-뷰-프리젠터), 그리고 MVW(모델-뷰-Whatever)가 있습니다.
MVC 소프트웨어 디자인 패턴은 다음의 세 부분으로 설명할 수 있습니다.
- 모델 : 데이터와 비즈니스 로직을 관리합니다.
- 뷰 : 레이아웃과 화면을 처리합니다.
- 컨트롤러 : 모델과 뷰로 명령을 전달합니다.
모델 뷰 컨트롤러 예시
간단한 쇼핑 리스트 앱을 통해 이번 주에 사야할 각 항목의 이름, 개수, 가격의 목록이 필요하다고 가정해보겠습니다.
MVC를 사용해 해당 기능을 구현하는 방법은 아래와 같습니다.
모델
모델은 앱이 포함해야 할 데이터가 무엇인지 정의합니다. 데이터의 상태가 변경되면, 모델을 일반적으로 뷰에게 알리며(따라서 필요한 대로 화면을 변경할 수 있습니다) 가끔 컨트롤러에게 알리기도 합니다(업데이트된 뷰를 조절하기 위해 다른 로직이 필요한 경우).
쇼핑 리스트 앱의 경우, 모델은 리스트 항목이 포함해야 하는 데이터와 이미 존재하는 리스트 항목이 무엇인지 지정합니다.
※ 규칙
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 합니다.
- 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 합니다.
- 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 합니다.
뷰
뷰는 앱의 데이터를 보여주는 방식을 정의합니다.
쇼핑 리스트 앱에서, 뷰는 항목이 사용자에게 보여지는 방식을 정의하며, 표시할 데이터를 모델로부터 받습니다.
※ 규칙
- 모델이 가지고 있는 정보를 따로 저장해서는 안됩니다.
- 모델이나 컨트롤러 같이 다른 구성 요소를 몰라야 합니다.
- 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야 합니다.
컨트롤러
컨트롤러는 앱의 사용자로부터의 입력에 대한 응답으로 모델 또는 뷰를 업데이트하는 로직을 포함합니다.
예를 들어, 쇼핑 리스트는 항목을 추가하거나 제거할 수 있게 해주는 입력 폼과 버튼을 갖습니다. 이러한 액션들은 모델이 업데이트되는 것이므로, 입력이 컨트롤러에게 전송되고, 모델을 적당히 처리 후, 업데이트된 데이터를 뷰로 전송합니다.
단순히 데이터를 다른 형태로 나타내기 위해 뷰를 업데이트할 수도 있습니다.
※ 규칙
- 모델이나 뷰에 대해 알고 있어야 합니다.
- 모델이나 뷰의 변경을 모니터링해야 합니다.
MVC 패턴의 한계
MVC 패턴에서 뷰는 컨트롤러에 연결되어 화면을 구성하는 단위 요소이므로 다수의 뷰를 가질 수 있습니다. 그리고 모델은 컨트롤러를 통해 뷰와 연결되지만, 컨트롤러에 의해 하나의 뷰에 연결될 수 있는 모델도 여러 개가 될 수 있어 뷰와 모델이 서로 의존성을 띕니다.
즉, 하나의 컨트롤러에 다수의 모델과 뷰가 복잡하게 연결되는 상황이 발생할 수 있습니다.
Q. MVC 패턴에 대해 설명해주세요.
MVC 패턴은 소프트웨어 디자인을 모델, 뷰, 컨트롤러로 나눠 구현하는 디자인 패턴으로 기능에 따라 작업을 분리하여 더욱 향상된 관리를 제공합니다. 모델은 백그라운드에서 동작하는 비즈니스 로직의 데이터를 처리하고, 뷰는 정보를 화면으로 보여주며, 컨트롤러는 사용자의 입력 처리와 흐름 제어를 담당하여 모델과 뷰를 연결시키는 역할을 수행합니다.
이러한 MVC 패턴의 단점으로는 단일 컨트롤러에 대해 다수의 모델 및 뷰가 생성될 수 있어 프로젝트의 규모가 커질 수록 규모와 관리가 복잡해진다는 점입니다.
참조 링크
- MVC (링크)
- [개발상식] MVC 패턴이란? (링크)
'CS > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 생성 패턴 - 싱글톤(Singleton) (0) | 2024.02.09 |
---|