Model/View

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)

이렇게 하면 QListViewQTableView가 같은 Model 데이터를 바라보게 된다.


핵심 정리

기존 방식

  • View 안에 데이터가 저장된다.
  • 작은 프로그램에서는 구현이 쉽다.
  • 화면이 많아질수록 관리가 어려워질 수 있다.
  • 데이터 처리 코드가 여러 화면에 중복될 수 있다.

Model/View 방식

  • Model은 데이터를 관리한다.
  • View는 데이터를 화면에 보여준다.
  • 하나의 Model을 여러 View가 함께 사용할 수 있다.
  • 역할이 분리되어 유지보수와 확장이 쉽다.
Model은 데이터를 관리하고, View는 데이터를 보여준다.
Model/View 구조에서는 데이터는 하나만 관리하고, 여러 View가 그 데이터를 다양한 방식으로 표현할 수 있다.