라떼군 이야기


13 / 13강

MVC와 패턴 선택 연습

마지막으로 화면이 있는 작은 프로그램을 생각해 봅시다. MVC는 데이터와 업무 규칙, 표시, 사용자 입력 처리를 나누는 구조입니다. 앞에서 배운 객체 설계 패턴보다 더 넓은 범위의 역할 분리를 다룹니다.

세 역할을 구분합니다

class Counter:
    def __init__(self):
        self.value = 0
    def increment(self):
        if self.value >= 2:
            return False
        self.value += 1
        return True

def show(model):
    print(f"Count: {model.value}")

class Controller:
    def __init__(self, model):
        self.model = model
    def on_increment(self):
        if self.model.increment():
            show(self.model)
        else:
            print("Limit reached")

controller = Controller(Counter())
for _ in range(3):
    controller.on_increment()

출력은 Count: 1, Count: 2, Limit reached입니다. 최대 2까지라는 규칙은 모델에 있으므로 화면 문구를 바꾸어도 유지됩니다. 이 예제는 컨트롤러가 뷰를 직접 호출합니다. 다른 MVC 구현에서는 옵서버나 프레임워크가 갱신을 연결할 수 있으며, 모든 프레임워크가 같은 경계를 쓰지는 않습니다.

작은 프로젝트에 적용해 봅니다

독서 목록 앱을 만든다면 먼저 책 추가, 표시, 저장을 단순하게 구현하세요. 그다음 실제 변경 요구에 맞춰 판단합니다.

패턴을 많이 썼다는 사실이 좋은 설계를 보장하지는 않습니다. 바뀌는 부분이 명확하고, 읽는 사람이 동작을 따라가기 쉬운지가 더 중요합니다.

확인 문제

최대 개수 제한을 버튼의 비활성화로만 구현하면 어떤 문제가 있을까요?

해설 보기

다른 화면이나 API가 모델을 직접 호출하면 제한을 건너뛸 수 있습니다. 화면은 입력을 안내하고, 핵심 규칙은 모델에서도 지켜야 합니다. 같은 규칙을 여러 화면에 흩어 놓지 않는 것이 핵심입니다.

제품 기획, 개발 파트너 찾으시나요? 개인, 팀, 기업 모두 환영. 문제 정의부터 출시까지 함께합니다.