MVC 패턴
MVC 패턴이란? - Model, View, Controller
하나의 애플리케이션, 프로젝트를 구성할 때 그 구성 요소를 세 가지의 역할로 구분한 패턴
- 👍 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다.
- 👍 유지보수성, 확장성, 유연성 ⬆
- 👎 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해진다.
![https://user-images.githubusercontent.com/88873302/226182013-35c7249a-501d-47f6-b948-ce0beab781df.png](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);
}
}
참고 자료