[디자인패턴]MVC 패턴

sunny·2023년 3월 19일
0

디자인 패턴

목록 보기
9/11
post-thumbnail

MVC 패턴


MVC 패턴이란? - Model, View, Controller

하나의 애플리케이션, 프로젝트를 구성할 때 그 구성 요소를 세 가지의 역할로 구분한 패턴

  • 👍 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다.
  • 👍 유지보수성, 확장성, 유연성 ⬆
  • 👎 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해진다.

https://user-images.githubusercontent.com/88873302/226182013-35c7249a-501d-47f6-b948-ce0beab781df.png

💡 사용자가 `Controller`를 조작하면 `Controller`는 `Model`을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 `View`를 제어해서 사용자에게 전달하게 된다.

Model 모델

  • 데이터를 가진 객체
    • 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다.

View 뷰

  • 모델을 기반으로 사용자가 볼 수 있는 화면
  • 변경이 일어나면 이를 Controller에 전달해야 한다

Controller 컨트롤러

  • 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할
  • 모델과 뷰의 생명주기 관리
  • 모델이나 뷰의 변경 통지를 받으면 이를 해석하여 각각의 구성 요소에 해당 내용을 알려준다

MVC를 지키면서 코딩하는 방법

1. Model은 Controller와 View에 의존하지 않아야 한다.

  • Model 내부에 Controller와 View에 관련된 코드가 있으면 안된다.
public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

2. View는 Model에만 의존해야 하고, Controller에는 의존하면 안된다.

  • View 내부에 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안된다.
public class OutputView {
    public void printProfile(Student student) {
        System.out.println("내 이름은 " + student.getName() + "입니다.");
        System.out.println("내 나이는 " + student.getAge() + "입니다.");
    }
}

3. View가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.

  • View는 사용자한테 보이는 UI와 모델로부터 받은 데이터가 합쳐져 만들어진 화면
  • 모든 사용자에게 똑같이 보여져야 하는 부분들은 Model로부터 받으면 안된다. View가 자체적으로 가지고 있어야 한다.

4. Controller는 Model과 View에 의존해도 된다.

  • Controller 내부에는 Model과 View의 코드가 있을 수 있다.

5. View가 Model로부터 데이터를 받을 때, 반드시 Controller에서 받아야 한다.

public class Controller {
    public static void main(String[] args) {
        Student student = new Student("기철", 25);
        OutputView.printProfile(student);
    }
}

참고 자료

0개의 댓글

관련 채용 정보