MVC 패턴 (Model-View-Controller pattern)

dlrmawn·2023년 12월 13일

CS

목록 보기
5/7

MVC 패턴 (MVC pattern)

Model-View-Controller의 약자
소프트웨어를 세 가지 주요 구성 요소로 나누어 개발하는 방법을 제공
각 구성 요소는 특정한 역할을 수행하며 서로 간섭을 최소화하여 유지보수와 확장성을 향상	

구성요소

  • 1. Model (모델)
    애플리케이션의 데이터와 비즈니스 로직을 담당합니다.
    데이터의 상태를 저장하고 조작하는 역할을 합니다.
    사용자 인터페이스나 뷰와 직접적으로 상호작용하지 않습니다.
import java.util.ArrayList;
import java.util.List;

public class TodoModel {	 //애플리케이션의 데이터와 비즈니스 로직을 관리
    private List<String> todos;    //할 일 목록을 저장하는 리스트

    public TodoModel() {
        this.todos = new ArrayList<>();
    }

    public void addTodo(String todo) {	//새로운 할 일을 목록에 추가
        todos.add(todo);
    }

    public List<String> getTodos() {	//현재의 할 일 목록을 반환
        return todos;
    }
}

  • 2. View (뷰)
    사용자에게 정보를 표시하고, 사용자의 입력을 받아 컨트롤러에 전달하는 역할을 합니다.
    모델의 데이터를 시각적으로 표현합니다.
    사용자 인터페이스 요소를 나타내는데 관여하지만, 비즈니스 로직을 직접적으로 처리하지 않습니다.
public class TodoView {		//사용자 인터페이스 담당
    public void showTodos(List<String> todos) {		// 할 일 목록을 받아와서 간단히 콘솔에 출력
        for (String todo : todos) {
            System.out.println(todo);
        }
    }
}

  • 3. Controller (컨트롤러)
    사용자의 입력을 받아 모델을 업데이트하거나 뷰를 업데이트하는 역할을 합니다.
    모델과 뷰 간의 통신을 조정하여 데이터의 흐름을 관리합니다.
    비즈니스 로직을 처리하고 모델을 업데이트하여 뷰에 반영합니다.
import java.util.Scanner;

public class TodoController {	//사용자 입력을 받아 처리하고 모델과 뷰를 관리
    private TodoModel model;
    private TodoView view;

    public TodoController(TodoModel model, TodoView view) {
        this.model = model;
        this.view = view;
    }

    public void addTodo() {		//사용자로부터 새로운 할 일을 입력받아 모델에 추가한 후, 뷰를 업데이트
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a new todo: ");
        String todo = scanner.nextLine();
        model.addTodo(todo);
        updateView();
    }

    public void updateView() {		//현재의 할 일 목록을 모델에서 가져와서 뷰를 업데이트
        List<String> todos = model.getTodos();
        view.showTodos(todos);
    }
}

Main 클래스 :

public class Main {
    public static void main(String[] args) {
        TodoModel model = new TodoModel();
        TodoView view = new TodoView();
        TodoController controller = new TodoController(model, view);

        // 추가된 할 일 목록 보기
        controller.updateView();

        // 새로운 할 일 추가
        controller.addTodo();

        // 업데이트된 할 일 목록 보기
        controller.updateView();
    }
}

이 예시에서는 TodoModel이 데이터와 비즈니스 로직을 처리하고,
TodoView가 사용자에게 데이터를 표시하며,
TodoController가 사용자 입력을 처리하고 모델과 뷰를 연결합니다.

이렇게 하면 각 구성 요소가 독립적으로 변경될 수 있고, 유지보수와 확장이 쉬워집니다.



장점과 단점

장점

  • 유지보수와 확장성이 뛰어남
    각 구성 요소가 독립적으로 존재하므로, 하나의 요소를 수정하더라도 다른 요소에 영향을 덜 주고 유지보수가 용이합니다.
    새로운 기능이나 모듈을 추가하기 쉽고, 시스템의 확장성이 향상됩니다.
  • 코드의 재사용성
    각 구성 요소는 재사용 가능한 모듈로서 개발될 수 있으므로, 비슷한 기능을 가진 다른 프로젝트에서 재사용이 가능합니다.
  • 병렬 개발이 가능
    모델, 뷰, 컨트롤러 간의 명확한 구분으로 각각의 개발팀이 병렬로 작업할 수 있습니다.

단점

  • 복잡성
    간단한 애플리케이션에는 너무 많은 구조가 필요할 수 있습니다. 이로 인해 작은 규모의 프로젝트에서는 오버 엔지니어링이 될 수 있습니다.
  • 학습 곡선
    초기에는 MVC의 개념을 이해하고 적용하는 데 시간이 걸릴 수 있습니다.
  • 오버헤드
    작은 규모의 애플리케이션에서는 간단한 구조가 더 적절할 수 있으며, MVC는 이러한 경우에 비해 오버헤드가 있을 수 있습니다.
  • 종속성 관리
    뷰와 모델 간에 어떻게 통신할지 정의하는 인터페이스가 필요하며, 이를 관리하기 위한 노력이 필요할 수 있습니다.







profile
수정해야 할 내용 있으면 메일 부탁드립니다! ⍥

0개의 댓글