---
description: 1.1.8 MVC 패턴 (Model-View-Controller)
---

# 1.1.8 Model-View-Controller Pattern

MVC(Model-View-Controller) 패턴은 소프트웨어 설계에서 애플리케이션을 세 가지 주요 구성 요소로 분리하여 모듈성을 높이고 유지보수성을 향상시키는 디자인 패턴이다. MVC 패턴은 사용자 인터페이스와 비즈니스 로직을 분리하여 코드의 복잡도를 줄이고, 각 구성 요소가 자신의 역할에 집중하도록 설계한다.



#### 1. MVC 패턴의 기본 개념

MVC 패턴은 다음 세 가지 구성 요소로 이루어진다:

1. **모델(Model)**: 애플리케이션의 데이터와 비즈니스 로직을 담당한다. 데이터베이스와의 상호 작용, 데이터 유효성 검사 등을 처리한다.
2. **뷰(View)**: 사용자 인터페이스를 담당한다. 모델의 데이터를 사용자에게 보여주는 역할을 한다.
3. **컨트롤러(Controller)**: 사용자 입력을 처리하고, 이를 바탕으로 모델과 뷰를 업데이트한다. 모델과 뷰 간의 흐름을 제어하는 중재자 역할을 한다.



2\. MVC 패턴의 장점

1. **모듈성**: 애플리케이션의 각 구성 요소가 독립적으로 변경될 수 있어 유지보수가 용이하다.
2. **재사용성**: 모델과 뷰를 분리하여 서로 다른 뷰를 사용해 동일한 모델을 재사용할 수 있다.
3. **유연성**: 애플리케이션의 한 부분을 변경해도 다른 부분에 영향을 최소화할 수 있다.



3\. 자바에서의 MVC 패턴 예시

자바에서 MVC 패턴을 구현하는 간단한 예시로, 학생 정보를 관리하는 애플리케이션을 살펴보자.

**3.1 모델(Model)**

학생 정보를 나타내는 모델 클래스이다.

```java
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Student {
    private String rollNo;
    private String name;
}
```



**3.2 뷰(View)**

학생 정보를 화면에 출력하는 뷰 클래스이다.

```java
public class StudentView {
    public void printStudentDetails(String studentName, String studentRollNo) {
        System.out.println("Student: ");
        System.out.println("Name: " + studentName);
        System.out.println("Roll No: " + studentRollNo);
    }
}
```



**3.3 컨트롤러(Controller)**

모델과 뷰를 연결하는 컨트롤러 클래스이다.

```java
@RequiredArgsConstructor
public class StudentController {
    private Student model;
    private StudentView view;

    public void setStudentName(String name) {
        model.setName(name);
    }

    public String getStudentName() {
        return model.getName();
    }

    public void setStudentRollNo(String rollNo) {
        model.setRollNo(rollNo);
    }

    public String getStudentRollNo() {
        return model.getRollNo();
    }

    public void updateView() {
        view.printStudentDetails(model.getName(), model.getRollNo());
    }
}
```



**3.4 클라이언트 코드**

애플리케이션을 실행하는 메인 클래스이다.

```java
public class MVCPatternDemo {
    public static void main(String[] args) {
        // 모델 객체 생성
        Student model = retrieveStudentFromDatabase();

        // 뷰 객체 생성
        StudentView view = new StudentView();

        // 컨트롤러 객체 생성
        StudentController controller = new StudentController(model, view);

        // 뷰 업데이트
        controller.updateView();

        // 모델 데이터 변경
        controller.setStudentName("John Doe");

        // 변경된 데이터로 뷰 업데이트
        controller.updateView();
    }

    private static Student retrieveStudentFromDatabase() {
        Student student = new Student();
        student.setName("Robert");
        student.setRollNo("10");
        return student;
    }
}
```

#### 4. 결론

MVC 패턴은 애플리케이션의 구조를 체계적으로 분리하여 개발과 유지보수를 용이하게 하는 강력한 디자인 패턴이다. 자바와 같은 객체지향 프로그래밍 언어에서 MVC 패턴을 적용하면 코드의 모듈성과 재사용성을 높일 수 있으며, 개발자가 각 구성 요소에 집중하여 더 나은 품질의 소프트웨어를 개발할 수 있다. 이 패턴을 이해하고 잘 활용하는 것은 효율적이고 유지보수 가능한 애플리케이션을 만드는 데 큰 도움이 된다.

