MVCは、1970年代後半、Xerox PARCでSmalltalkの開発とともに紹介された、実績のあるアーキテクチャパターンです。
主な目的は*関心の分離(Separation of Concerns)*です。アプリケーションの構成要素を次の3つに分け、それぞれが自分の責務に集中できるようにします。
public class User { private String id; private String name; private String email; public User(String id, String name, String email) { this.id = id; this.name = name; this.email = email; } // Getters and Setters public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}
UserService.java (비즈니스 로직을 처리하는 모델 - Service 역할)
import java.util.HashMap;import java.util.Map;public class UserService { private Map<String, User> userDatabase = new HashMap<>(); // 간단한 인메모리 DB 역할 public User getUserById(String id) { return userDatabase.get(id); } public void createUser(String id, String name, String email) { if (userDatabase.containsKey(id)) { System.out.println("오류: 사용자 ID '" + id + "'는 이미 존재합니다."); return; } User newUser = new User(id, name, email); userDatabase.put(id, newUser); System.out.println("사용자 '" + name + "'이(가) 성공적으로 생성되었습니다."); // 데이터 변경이 발생했으므로, 옵저버에게 알리는 로직이 추가될 수 있음 }}
public class UserController { private UserService model; // 모델(UserService)에 대한 참조 private UserView view; // 뷰(UserView)에 대한 참조 public UserController(UserService model, UserView view) { this.model = model; this.view = view; } public void handleCreateUserRequest(String id, String name, String email) { model.createUser(id, name, email); // 모델에서 생성 성공/실패 여부를 받아 뷰에 다른 메시지를 보여줄 수도 있음 // 여기서는 UserService 내부에서 간단히 출력함 } public void handleGetUserRequest(String id) { User user = model.getUserById(id); if (user != null) { view.printUserDetails(user.getName(), user.getEmail()); } else { view.showMessage("사용자 ID '" + id + "'를 찾을 수 없습니다."); } } // main 메서드 (애플리케이션 실행 예시) public static void main(String[] args) { // 1. 모델과 뷰 객체 생성 UserService userService = new UserService(); UserView userView = new UserView(); // 2. 컨트롤러 생성 및 모델/뷰 주입 UserController userController = new UserController(userService, userView); // 3. 사용자 요청 시뮬레이션 (컨트롤러를 통해 상호작용) // 사용자 생성 요청 userController.handleCreateUserRequest("user001", "홍길동", "gildong@example.com"); userController.handleCreateUserRequest("user002", "이순신", "sunsin@example.com"); System.out.println(); // 줄 바꿈 // 사용자 정보 조회 요청 userController.handleGetUserRequest("user001"); System.out.println(); userController.handleGetUserRequest("user003"); // 존재하지 않는 사용자 }}
上の main メソッドは、MVCの要素を作り、ユーザーの要求をシミュレーションして、コントローラーを介したやり取りを示す例です。