SPRING&BOOT

MVC 디자인 패턴

jki09871 2024. 8. 9. 13:41

MVC 디자인 패턴: 입문자를 위한 안내서

MVC란 무엇인가요?

MVC는 Model-View-Controller의 약자로, 소프트웨어 개발에서 자주 사용되는 디자인 패턴입니다. 이 패턴은 애플리케이션을 세 가지 주요 구성 요소로 나누어, 각 구성 요소가 특정 역할을 맡도록 설계됩니다. 이렇게 나누는 이유는 코드의 구조를 명확히 하고 유지보수를 쉽게 하기 위함입니다.

1. Model (모델)

모델은 애플리케이션의 데이터와 그 데이터에 대한 로직을 담당합니다. 예를 들어, 사용자의 정보를 저장하거나 데이터베이스와 상호작용하는 작업이 모델의 역할입니다. 모델은 애플리케이션의 상태를 표현하며, 뷰와 컨트롤러로부터 독립적으로 동작합니다.

역할

  • 데이터 처리
  • 비즈니스 로직 구현
  • 데이터베이스와 상호작용

2. View (뷰)

는 사용자 인터페이스(UI)를 담당합니다. 사용자가 애플리케이션과 상호작용하는 화면을 구성하며, 모델의 데이터를 시각적으로 표현합니다. 뷰는 모델로부터 데이터를 받아와서 표시하지만, 데이터 처리나 로직은 수행하지 않습니다.

역할

  • 사용자에게 데이터를 시각적으로 제공
  • 사용자와의 상호작용을 처리

3. Controller (컨트롤러)

컨트롤러는 모델과 뷰 사이의 중재자 역할을 합니다. 사용자의 입력을 받아서 처리하고, 필요한 경우 모델을 업데이트하며, 그 결과를 뷰에 반영합니다. 즉, 사용자의 액션을 처리하여 모델과 뷰를 조작합니다.

역할

  • 사용자 입력 처리
  • 모델 업데이트
  • 뷰 업데이트

MVC 패턴의 장점

  1. 구조화된 코드: MVC는 애플리케이션의 구조를 명확히 나누어 코드의 유지보수를 용이하게 합니다.
  2. 재사용성: 모델, 뷰, 컨트롤러가 독립적으로 작동하므로, 특정 구성 요소를 다른 애플리케이션에서 재사용할 수 있습니다.
  3. 분리된 관심사: 각 구성 요소가 특정 역할만을 수행하므로, 코드의 가독성과 관리성이 높아집니다.
  4. 테스트 용이성: 비즈니스 로직과 UI가 분리되어 있기 때문에, 모델과 뷰를 독립적으로 테스트할 수 있습니다.

MVC 패턴의 예

간단한 예로, 웹 애플리케이션을 생각해 봅시다. 사용자가 웹 페이지에서 버튼을 클릭하면, 그 클릭 이벤트가 컨트롤러로 전달됩니다. 컨트롤러는 이 이벤트를 처리하고, 필요에 따라 모델을 업데이트합니다. 모델이 업데이트되면, 그 결과를 뷰에 전달하여 사용자에게 새로운 정보를 보여줍니다.

예제 코드

1. 모델 (Model)

UserModel 클래스는 데이터와 그 데이터에 대한 로직을 담당합니다. 여기서는 사용자의 이름을 저장하고 관리하는 역할을 합니다.

public class UserModel {
    private String name;

    // Getter
    public String getName() {
        return name;
    }

    // Setter
    public void setName(String name) {
        this.name = name;
    }
}
  • getName(): 현재 사용자의 이름을 반환합니다.
  • setName(String name): 사용자의 이름을 설정합니다.

2. 뷰 (View)

UserView 클래스는 사용자에게 데이터를 시각적으로 표시하는 역할을 합니다. 여기서는 단순히 사용자의 이름을 출력하는 메서드를 제공합니다.

public class UserView {
    public void displayUser(String name) {
        System.out.println("User: " + name);
    }
}
  • displayUser(String name): 전달받은 이름을 콘솔에 출력합니다.

3. 컨트롤러 (Controller)

UserController 클래스는 모델과 뷰 사이의 상호작용을 관리합니다. 사용자의 입력을 처리하고, 모델을 업데이트하며, 업데이트된 데이터를 뷰에 전달하여 화면에 반영합니다.

public class UserController {
    private UserModel model;
    private UserView view;

    public UserController(UserModel model, UserView view) {
        this.model = model;
        this.view = view;
    }

    public void setUserName(String name) {
        model.setName(name);  // 모델을 업데이트합니다.
    }

    public void updateView() {
        view.displayUser(model.getName());  // 모델의 데이터를 뷰에 전달하여 화면에 출력합니다.
    }
}
  • setUserName(String name): 전달받은 이름으로 모델의 데이터를 업데이트합니다.
  • updateView(): 모델에서 데이터를 가져와 뷰에 전달하여 화면에 표시합니다.

전체 동작 과정

이제 이 구성 요소들이 함께 어떻게 동작하는지 설명하겠습니다.

  1. 모델 생성: UserModel의 인스턴스를 생성합니다. 이 인스턴스는 사용자의 데이터를 저장하는 역할을 합니다.
  2. 뷰 생성: UserView의 인스턴스를 생성합니다. 이 인스턴스는 사용자에게 데이터를 시각적으로 표시합니다.
  3. 컨트롤러 생성: UserController의 인스턴스를 생성합니다. 이 인스턴스는 모델과 뷰를 연결합니다.
public class MVCDemo {
    public static void main(String[] args) {
        // 모델과 뷰를 생성합니다.
        UserModel model = new UserModel();
        UserView view = new UserView();
        
        // 모델과 뷰를 컨트롤러에 연결합니다.
        UserController controller = new UserController(model, view);
        
        // 컨트롤러를 통해 모델의 데이터를 업데이트하고, 뷰를 업데이트합니다.
        controller.setUserName("John Doe");
        controller.updateView();
    }
}
  • UserModel 객체는 사용자 이름을 저장합니다.
  • UserView 객체는 사용자에게 데이터를 표시합니다.
  • UserController 객체는 사용자의 이름을 설정하고, 그 결과를 뷰에 반영합니다.

이 예제에서는 MVCDemo 클래스의 main 메서드에서 모델, 뷰, 컨트롤러를 생성하고 연결한 후, 컨트롤러를 통해 모델을 업데이트하고 뷰를 갱신합니다. 이 과정은 애플리케이션의 상태 변경이 어떻게 시각적으로 반영되는지를 보여줍니다.

이 구조는 MVC 패턴의 기본 원칙을 잘 나타내며, 실제 애플리케이션에서는 이와 유사한 구조를 통해 코드의 유지보수성과 재사용성을 높일 수 있습니다.

'SPRING&BOOT' 카테고리의 다른 글

Path Variable과 Request Param  (0) 2024.08.15
IoC (제어의 역전) 이해하기  (0) 2024.08.13
의존성 주입 (DI, Dependency Injection) 이해하기  (0) 2024.08.13
3 Layer Architecture  (0) 2024.08.12
그레이들(Gradle)이란?  (0) 2024.08.09