PHpullh

PYTHON · 디자인패턴

MVC/MTV 패턴

Model-View-Controller(MVC)와 Django의 Model-Template-View(MTV) 패턴을 Python으로 구현합니다.

디자인패턴고급MVCMTV디자인패턴architecture

핵심 설명

Model-View-Controller(MVC)와 Django의 Model-Template-View(MTV) 패턴을 Python으로 구현합니다.

Python code

from dataclasses import dataclass, field

# Model: 데이터와 비즈니스 로직
@dataclass
class UserModel:
    users: list[dict] = field(default_factory=list)

    def add(self, name: str, email: str):
        user = {"id": len(self.users) + 1, "name": name, "email": email}
        self.users.append(user)
        return user

    def get_all(self) -> list[dict]:
        return self.users.copy()

    def find(self, user_id: int) -> dict | None:
        return next((u for u in self.users if u["id"] == user_id), None)

# View: 표시 로직
class UserView:
    @staticmethod
    def display_users(users: list[dict]):
        print("=== 사용자 목록 ===")
        for u in users:
            print(f"  [{u['id']}] {u['name']} ({u['email']})")

    @staticmethod
    def display_message(msg: str):
        print(f">> {msg}")

# Controller: Model과 View 연결
class UserController:
    def __init__(self):
        self.model = UserModel()
        self.view = UserView()

    def create_user(self, name: str, email: str):
        user = self.model.add(name, email)
        self.view.display_message(f"{user['name']} 생성됨")

    def list_users(self):
        self.view.display_users(self.model.get_all())

# 사용
ctrl = UserController()
ctrl.create_user("Alice", "alice@test.com")
ctrl.create_user("Bob", "bob@test.com")
ctrl.list_users()

학습 팁

Django의 MTV에서 View는 MVC의 Controller 역할, Template이 MVC의 View 역할입니다.

주의할 점

Model에 표시 로직을, View에 비즈니스 로직을 넣으면 관심사 분리가 무너집니다.

자주 묻는 질문

MVC/MTV 패턴란 무엇인가요?

Model-View-Controller(MVC)와 Django의 Model-Template-View(MTV) 패턴을 Python으로 구현합니다.

MVC/MTV 패턴 학습 시 주의할 점은 무엇인가요?

Model에 표시 로직을, View에 비즈니스 로직을 넣으면 관심사 분리가 무너집니다.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.