MVC (Model-View-Controller) 패턴은 소프트웨어를 Model, View, Controller로 분리하는 패턴입니다.
각각의 요소는 다음과 같은 역할을 수행합니다.
- Model: 데이터를 처리하고 저장하는 역할을 합니다.
모델은 애플리케이션의 핵심 로직을 담고 있으며, 데이터의 형태와 구조를 정의합니다.
모델은 데이터를 가져오고, 추가하고, 수정하고, 삭제하는 기능을 제공합니다. - View: 사용자 인터페이스를 담당합니다.
뷰는 모델의 데이터를 표시하고, 사용자의 입력을 받아서 컨트롤러로 전달합니다.
뷰는 화면에 보여지는 것을 제외하고는 아무런 로직을 처리하지 않습니다. - Controller: 뷰와 모델 사이의 상호작용을 담당합니다.
컨트롤러는 사용자의 입력을 처리하고, 모델의 데이터를 변경하고, 변경된 데이터를 뷰에 업데이트합니다.
컨트롤러는 뷰와 모델을 서로 연결하는 역할을 합니다.
MVC 패턴에서는 뷰와 모델이 서로 직접적으로 연결되지 않고, 컨트롤러를 통해 상호작용합니다.
이를 통해, 뷰와 모델을 독립적으로 변경하고 확장할 수 있으며, 코드 유지보수성과 재사용성을 향상시킬 수 있습니다.
또한, 모델은 다양한 뷰에서 재사용할 수 있습니다.
예를 들어, 같은 모델 데이터를 이용하는 두 개의 뷰가 있다면, 모델의 데이터가 변경되면 두 뷰 모두 업데이트됩니다.
다음은 간단한 MVC 패턴의 예제 코드입니다.
#include <iostream>
#include <vector>
// Model
class Data {
public:
void add(int value) {
values.push_back(value);
}
int get(int index) const {
return values[index];
}
int size() const {
return values.size();
}
private:
std::vector values;
};
// View
class View {
public:
void show(const Data& data) const {
std::cout << "Data: ";
for (int i = 0; i < data.size(); ++i) {
std::cout << data.get(i) << " ";
}
std::cout << std::endl;
}
};
// Controller
class Controller {
public:
Controller(Data& data, View& view)
: data(data), view(view)
{}
void add(int value) {
data.add(value);
view.show(data);
}
private:
Data& data;
View& view;
};
// Main
int main() {
Data data;
View view;
Controller controller(data, view);
controller.add(1);
controller.add(2);
controller.add(3);
return 0;
}
위의 예제 코드에서 Model은 Data 클래스로 구현되어 있습니다.
Data 클래스는 int형 값들을 저장하는 std::vector를 멤버로 가지고 있으며, 값을 추가하는 add(), 값을 가져오는 get(), 데이터 크기를 반환하는 size() 함수를 제공합니다.
View는 View 클래스로 구현되어 있습니다.
View 클래스는 Data 객체를 받아서 출력하는 show() 함수를 제공합니다.
Controller는 Controller 클래스로 구현되어 있습니다.
Controller 클래스는 Data와 View 객체를 받아서, Data에 값을 추가하는 add() 함수를 제공합니다. add() 함수는 값을 추가한 후, View 객체의 show() 함수를 호출하여 데이터를 출력합니다.
위 예제 코드에서는 Main 함수에서 Data, View, Controller 객체를 생성하여 Controller의 add() 함수를 호출하여 데이터를 추가하고, View 객체를 통해 데이터를 출력합니다.
'소프트웨어 디자인 패턴' 카테고리의 다른 글
디자인 패턴. 생성 패턴(Creational Patterns) (0) | 2023.03.25 |
---|---|
GoF의 디자인 패턴 (0) | 2023.03.24 |
디자인 패턴. MVVM (Model-View-ViewModel) (0) | 2023.03.11 |
디자인 패턴. MVP (Model-View-Presenter) (0) | 2023.03.10 |
디자인 패턴. MVC, MVP, MVVM (0) | 2023.03.08 |