‣
소프트 웨어 디자인 패턴의 유형 중 하나로 사용자 인터페이스와 비즈니스 로직을 분리하여 모듈화, 유지보수성, 재사용성, 확장성에 용이하게 설계한 것이 특징이다.
모든 로직이 하나의 파일에 집중되어 있고 비즈니스 로직과 UI 로직이 혼재해 있다. 코드 수정 시 영향을 받는 범위가 넓고, 새로운 기능을 추가하고 테스트하기가 어렵다. 이러한 코드는 협업이 비효율적일 수 밖에 없다. 음식점을 예로 들면, 직원 혼자 요리, 홀 서빙, 주문 받기 등을 다 하는 음식점인 것이다.
public class UserRegistration {
// 사용자 등록 메서드
public String register(String username, String password) {
// 비즈니스 로직 - 유효성 검사
if (username == null || password == null) {
return generateErrorHtml("오류: 사용자 이름 또는 비밀번호가 nuLL입니다.");
}
if(password. Length() < 6) {
return generateErrorHtml("오류: 비밀번호는 최소 6자리 이상이어야 합니다.");
}
// 비즈니스 로직 - 사용자 저장
Database db = new Database();
db. save(username, password);
// 비즈니스 로직 - 감사 이메일 전송
EmailService emailService = new EmailService();
emailService.sendThankYouEmail(username);
// UI 로직 - 성공 메시지 출력
return generateSuccessHtml (username);
}
// 성공 HTML 생성 메서드
private String generateSuccessHtml(String username) {
return "‹html>«body>" +
"<h1>사용자 등록 성공!</h1>" +
"<p>환영합니다," + username + "님!</p>" +
"</body></html>";
}
// 오류 HTML 생성 메서드
private String generateErrorHtml(String errorMessage) {
return "chtml><bodyy" +
"<h1>오류</h>" +
"<p›" + errorMessage + "</p>" +
"</body></html>";
}
}
Model, Controller, View로 나누어 역할의 배분이 이뤄진다. 요리로 예를 들면 Model에는 요리 → 작업 처리 결과 데이터를 담당하고 Controller에서는 주문 받기, 서빙 → 사용자 입력, 전달, 업데이트를 담당, View에서는 플레이팅 → 유저 인터페이스를 보여주는 부분을 담당하는 것이라고 볼 수 있다.
Model
public class User {
private String username;
private string password;
// Getter, Setter
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this. password = password;
}
}