Model/View 구조 비교
지금까지 살펴본 내용을 기준으로 기존 방식과 Model/View 방식을 비교해보려한다.
가장 큰 차이는 데이터가 어디에 저장되는가이다.
5.1 구조 비교
| 구분 | 기존 방식 | Model/View 방식 |
|---|---|---|
| 데이터 위치 | View 내부 | Model 내부 |
| View 역할 | 데이터 저장과 화면 표시를 함께 담당한다. | 데이터를 화면에 보여주는 역할을 담당한다. |
| Model 역할 | 없거나 약하다. | 데이터를 중앙에서 관리한다. |
| 데이터 공유 | 어렵다. | 쉽다. |
| 화면 추가 | 화면마다 데이터 처리 코드가 중복될 수 있다. | 같은 Model을 바라보는 View만 추가하면 된다. |
| 유지보수 | 화면이 많아질수록 복잡해진다. | 역할이 분리되어 관리하기 쉽다. |
기존 방식에서는 View가 데이터를 직접 가지고 있다.
반면 Model/View 방식에서는 데이터를 Model에 두고, View는 그 데이터를 화면에 보여주기만 한다.
기존 방식
View 1 ←── data
View 2 ←── data
View 3 ←── data
각 View가 데이터를 따로 들고 있음
Model/View 방식
View 1 ←─┐
View 2 ←── Model ←── data
View 3 ←─┘
하나의 Model을 여러 View가 함께 바라봄
쉽게 비유하기
기존 방식은 호텔 프론트 직원마다 예약 장부를 따로 들고 있는 것과 비슷하다.
직원 A 장부
└─ 김철수 예약
직원 B 장부
└─ 김철수 예약
직원 C 장부
└─ 김철수 예약
이 경우 예약 정보가 변경되면 모든 장부를 각각 수정해야 한다.
하지만 Model/View 방식은 예약 장부를 하나만 두고, 여러 직원이 같은 장부를 보는 구조이다.
예약 장부(Model)
└─ 김철수 예약
직원 A(View)
직원 B(View)
직원 C(View)
이렇게 하면 예약 정보가 변경되어도 Model 하나만 수정하면 된다.
5.2 의존성 관점에서 비교
기존 방식은 View와 데이터가 강하게 묶이는 구조이다.
Model/View 방식은 데이터 관리와 화면 표시를 분리하는 구조이다.
| 관점 | 기존 방식 | Model/View 방식 |
|---|---|---|
| 의존성 | View와 데이터가 강하게 묶인다. | Model과 View의 역할이 분리된다. |
| 수정 영향 | 데이터 수정이 화면 코드에 영향을 줄 수 있다. | 데이터 수정은 Model 중심으로 관리할 수 있다. |
| 확장 | 화면이 늘어나면 데이터 처리 코드도 늘어날 수 있다. | 새 View를 추가해도 같은 Model을 사용할 수 있다. |
기존 방식
# 기존 방식
# 화면과 데이터가 한 곳에 섞여 있음
View
├── 화면 코드
└── 데이터 코드
Model/View 방식
# Model/View 방식
# 역할이 나누어져 있음
Model
└── 데이터 관리
View
└── 화면 표시
중요한 점은 Model/View 구조가 View를 없애는 구조가 아니라는 점이다.
View는 화면을 담당하고, Model은 데이터를 담당하도록 역할을 분리하는 것이 핵심이다.
5.3 같은 Model, 다른 View
Model/View 구조를 사용하면 같은 데이터를 여러 View에서 다르게 보여줄 수 있다.
예를 들어 같은 여행 데이터를 카드 형태, 리스트 형태, 표 형태로 보여줄 수 있다.
같은 Model
↓
CardView
ListView
TableView
데이터는 하나
표시 방식은 여러 개
Travel Log 예시
예를 들어 여행 기록 데이터가 하나 있다고 가정해보겠다.
travel_list = [
{
"place": "제주도",
"date": "2026-05-29",
"rating": 5
}
]
ListView 형태
제주도
CardView 형태
[제주도]
2026-05-29
★★★★★
TableView 형태
장소 날짜
----------------
제주도 2026-05-29
이처럼 데이터는 하나이지만, 보여주는 방식은 여러 개로 나눌 수 있다.
Qt에서의 Model/View 예시
Qt에서는 Model/View 구조를 위해 다음과 같은 클래스들을 제공한다.
Model
└─ QStringListModel
View
├─ QListView
├─ QTableView
└─ QTreeView
하나의 Model을 만들고 여러 View에 연결하면 여러 화면이 같은 데이터를 볼 수 있다.
model = QStringListModel()
model.setStringList([
"제주도",
"부산",
"강릉"
])
listView.setModel(model)
tableView.setModel(model)
이렇게 하면 QListView와 QTableView가 같은 Model 데이터를 바라보게 된다.
핵심 정리
기존 방식
- View 안에 데이터가 저장된다.
- 작은 프로그램에서는 구현이 쉽다.
- 화면이 많아질수록 관리가 어려워질 수 있다.
- 데이터 처리 코드가 여러 화면에 중복될 수 있다.
Model/View 방식
- Model은 데이터를 관리한다.
- View는 데이터를 화면에 보여준다.
- 하나의 Model을 여러 View가 함께 사용할 수 있다.
- 역할이 분리되어 유지보수와 확장이 쉽다.
Model은 데이터를 관리하고, View는 데이터를 보여준다.
Model/View 구조에서는 데이터는 하나만 관리하고, 여러 View가 그 데이터를 다양한 방식으로 표현할 수 있다.
'개발일지 > python' 카테고리의 다른 글
| Model/View 로그인 구조 구현 정리 (0) | 2026.06.01 |
|---|---|
| 객체지향 프로그래밍(OOP) 핵심 개념 총정리 (0) | 2026.05.28 |
| [Python] QScrollArea (0) | 2026.05.27 |
| [Python] PySide6 QTabWidget 실습 / 파일 분리 (0) | 2026.05.22 |
| [숙제] 상속 예제 정리 (0) | 2026.05.17 |