MVC 패턴이란 무엇인가?

혀니앤·2022년 1월 15일
0

MVC 패턴에 대해 알기 전에, 디자인 패턴이 무엇인지부터 알아야 한다.

1. 디자인 패턴

  1. 이미 만들어져있는 해결책을 굳이 다시 만들 필요가 없으므로, 그 방법을 재사용하도록 만들어진 특정 규약
  2. 특정 맥락에서 문제점이 발견됐을 때 빠르게 해결할 수 있게 돕거나, 개발자들 간의 소통을 돕는다

MVC 패턴은 디자인 패턴에 속한다.

2. MVC 패턴의 정의

  1. Model, View, Controller로 프로젝트의 구성요소를 세 가지로 구분한 패턴
  2. 사용자가 Controller를 조작하면, ControllerModel에서 데이터를 수정하거나 가져오고, 그 수정된 데이터를 View에 보여주는 방식으로 작동한다.


3. 왜 MVC 패턴을 사용하나?

  1. 효율성 : 사용자가 보는 View, 데이터처리의 Model, ViewModel을 중간에서 제어하는 Controller로 역할을 나누어 효율적으로 작업할 수 있다.
  2. 단순함 : 구조가 가장 단순하고 직관적이다
  3. 유연성, 확장성

4. 단점도 있을까?

  1. ViewModel 사이의 의존도가 높아진다.
    => 유지보수가 어려워진다

5. 예시

  1. Model : 데이터를 담고 있는 클래스
public class Item {
    private String name;
    private Money price;

    public Item(String name, Money price) {
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "상품명: " + name + ", 금액: " + price;
    }
}
  1. View : 화면에 보이도록 함
public class OutputView {
    public static void printTitle() {
        System.out.println("중고나라에 오신 것을 환영합니다!");
    }

    public static void nameInstruction() {
        System.out.println("물품명을 입력해주세요.");
    }

    public static void priceInstruction() {
        System.out.println("금액을 입력해주세요.");
    }

    public static void printItem(Item item) {
        System.out.println(item);
    }
}
  1. Controller : 모델과 뷰 사이의 동작과 가시성 작용
package controller;

import domain.Item;
import domain.Money;
import view.InputView;
import view.OutputView;

public class MarketController {
    public static void run() {
        OutputView.printTitle();
        OutputView.nameInstruction();
        String name = InputView.getInput();
        OutputView.priceInstruction();
        Money price = new Money(InputView.getInput());
        Item item = new Item(name, price);
        OutputView.printItem(item);
    }
}

https://log.hodol.dev/techcourse/mvc-pattern

참고

https://gmlwjd9405.github.io/2018/07/06/design-pattern.html
https://coding-factory.tistory.com/708
https://server-engineer.tistory.com/167
https://m.blog.naver.com/jhc9639/220967034588
https://opentutorials.org/course/697/3828
https://blog.daum.net/midasyoo/274

profile
일단 시작하기

0개의 댓글