MVC

moon.kick·2025년 2월 27일

MVC 패턴은 Model-View-Controller로 구성된 설계 패턴으로, 애플리케이션의 구성 요소를 역할별로 나누어 개발하는 방법입니다. 이 패턴을 사용하면 코드가 더 깔끔하고 유지보수하기 쉬워집니다. 각 구성 요소가 무엇을 담당하는지, 그리고 어떻게 협력하는지 차근차근 설명해드릴게요.

1. Model (모델)

  • 역할: 애플리케이션의 데이터와 비즈니스 로직을 처리하는 부분입니다. 데이터를 저장하고, 처리하는 메소드들이 모델에 포함됩니다.
  • 현재 예제에서의 모델:
    • CustomException: 예외 클래스는 애플리케이션에서 발생할 수 있는 오류를 정의하는 모델입니다. 이 클래스는 애플리케이션에서 일어날 수 있는 예외적인 상황을 표현하고, 예외 메시지를 사용자에게 전달하는 역할을 합니다.
    • DAO (Database Access Object): 실제로 데이터베이스와 연결하여 데이터를 처리하는 부분으로, 데이터베이스 연동을 위한 기능을 담당합니다. 예제에서는 예외를 발생시키는 메소드만 구현되어 있습니다.

2. View (뷰)

  • 역할: 사용자 인터페이스(UI)와 관련된 모든 부분을 담당합니다. 사용자에게 보여지는 내용을 출력하고, 사용자의 입력을 받습니다.
  • 현재 예제에서의 뷰:
    • View 클래스는 사용자에게 메시지를 출력하는 역할을 합니다. 예를 들어, 사용자가 나이를 입력했을 때, 그 나이에 따라 "입장하신걸 환영합니다." 또는 "전공자는 대기업 가라."라는 메시지를 출력합니다.
    • 이 클래스는 화면에 표시되는 모든 출력 메시지를 담당하며, 사용자에게 정보를 전달합니다.
public class View {
    public static void printMessage(String message) {
        System.out.println(message);
    }
}

3. Controller (컨트롤러)

  • 역할: 사용자 요청을 받고, 이를 처리하기 위해 모델을 호출하며, 결과를 뷰로 전달하는 중개 역할을 합니다. 즉, 사용자 입력을 처리하고, 모델과 뷰를 연결하는 역할을 합니다.
  • 현재 예제에서의 컨트롤러:
    • Controller 클래스는 사용자의 나이 정보(입력)를 받아서, 그 값에 따라 CustomException을 던질지 또는 환영 메시지를 출력할지 결정합니다.
    • 나이가 20 미만이면 CustomException을 발생시키고, 그렇지 않으면 환영 메시지를 출력하는 비즈니스 로직을 처리합니다.
    • 이 클래스는 뷰에 표시할 메시지를 결정하고, 모델에 예외를 던지도록 지시합니다.
public class Controller {
    public void checkAge(int age) throws CustomException {
        if (age < 20) {
            throw new CustomException("전공자는 대기업 가라.");
        } else {
            View.printMessage("입장하신걸 환영합니다.");
        }
    }
}

각 컴포넌트의 협력 구조

  1. 사용자Main 클래스를 실행하여 Service 클래스를 호출합니다.
  2. Main 클래스는 Service 클래스의 메소드를 호출하여 나이를 처리합니다.
  3. Service 클래스는 Controller를 호출하여 나이에 맞는 비즈니스 로직을 실행합니다.
    • 나이가 20 미만일 경우 CustomException이 발생하고, 그 예외는 Main에서 처리됩니다.
  4. 예외가 발생하지 않으면, Controller가 뷰에 메시지를 출력하라는 요청을 합니다.
  5. 결과: 사용자에게 "입장하신걸 환영합니다." 또는 예외 메시지가 출력됩니다.

MVC 구조의 흐름 요약

  • Model: 데이터를 처리하고 예외를 정의합니다. (CustomException, DAO 등)
  • View: 사용자에게 메시지를 출력합니다. (View 클래스)
  • Controller: 사용자의 입력을 받아 로직을 처리하고, 모델과 뷰를 연결합니다. (Controller 클래스)
  • Main: 애플리케이션의 실행 흐름을 제어하고, ServiceController를 통해 사용자 요청을 처리합니다.

MVC 패턴의 장점

  • 분리된 책임: 각 컴포넌트가 명확한 책임을 가지고 있어 유지보수가 용이합니다.
  • 확장성: 새로운 기능을 추가할 때, 기존 코드를 건드리지 않고 각 컴포넌트의 역할을 확장할 수 있습니다.
  • 재사용성: 모델, 뷰, 컨트롤러가 독립적으로 존재하므로, 재사용이 용이합니다.

위와 같이 MVC 패턴을 활용하면, 코드의 역할이 명확히 나누어져 더 깔끔하고 효율적인 애플리케이션을 만들 수 있습니다.

profile
@mgkick

0개의 댓글