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("입장하신걸 환영합니다.");
}
}
}
각 컴포넌트의 협력 구조
- 사용자는
Main 클래스를 실행하여 Service 클래스를 호출합니다.
Main 클래스는 Service 클래스의 메소드를 호출하여 나이를 처리합니다.
Service 클래스는 Controller를 호출하여 나이에 맞는 비즈니스 로직을 실행합니다.
- 나이가 20 미만일 경우
CustomException이 발생하고, 그 예외는 Main에서 처리됩니다.
- 예외가 발생하지 않으면,
Controller가 뷰에 메시지를 출력하라는 요청을 합니다.
- 결과: 사용자에게 "입장하신걸 환영합니다." 또는 예외 메시지가 출력됩니다.
MVC 구조의 흐름 요약
- Model: 데이터를 처리하고 예외를 정의합니다. (
CustomException, DAO 등)
- View: 사용자에게 메시지를 출력합니다. (
View 클래스)
- Controller: 사용자의 입력을 받아 로직을 처리하고, 모델과 뷰를 연결합니다. (
Controller 클래스)
- Main: 애플리케이션의 실행 흐름을 제어하고,
Service와 Controller를 통해 사용자 요청을 처리합니다.
MVC 패턴의 장점
- 분리된 책임: 각 컴포넌트가 명확한 책임을 가지고 있어 유지보수가 용이합니다.
- 확장성: 새로운 기능을 추가할 때, 기존 코드를 건드리지 않고 각 컴포넌트의 역할을 확장할 수 있습니다.
- 재사용성: 모델, 뷰, 컨트롤러가 독립적으로 존재하므로, 재사용이 용이합니다.
위와 같이 MVC 패턴을 활용하면, 코드의 역할이 명확히 나누어져 더 깔끔하고 효율적인 애플리케이션을 만들 수 있습니다.