MVP 패턴(Model-View-Presenter Pattern)은 애플리케이션을 모델(Model), 뷰(View), 프리젠터(Presenter) 세 가지 주요 컴포넌트로 분리하여 유저 인터페이스와 비즈니스 로직을 분리하는 아키텍처 패턴이다.
특히 모바일 애플리케이션과 데스크톱 애플리케이션에서 자주 사용된다.
MVP 패턴은 UI와 비즈니스 로직의 결합을 줄여 코드의 재사용성과 유지보수성을 높인다.
MVC 패턴의 단점을 보완한 구조로, 컨트롤러 대신 프리젠터가 UI 논리를 담당한다.
MVP 패턴은 특히 비즈니스 로직이 복잡하고 다양한 뷰를 지원해야 하는 애플리케이션에서 효과적이다.
사용자가 메모를 작성하고 저장하거나 삭제하는 애플리케이션에서 MVP 패턴을 적용할 수 있다.
[View] <--> [Presenter] <--> [Model]
메모 애플리케이션에서 메모를 관리하고 보여주는 예제를 Java로 구현할 수 있다.
// Note 모델 클래스: 메모 데이터를 관리하는 클래스
public class Note {
private String content;
public Note() {}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
// NoteView 인터페이스: 사용자에게 메모 데이터를 보여주는 뷰 역할
public interface NoteView {
void showNoteContent(String content);
void showSaveSuccessMessage();
void showError(String errorMessage);
}
// NotePresenter 클래스: 모델과 뷰를 연결하는 프리젠터 역할
public class NotePresenter {
private Note model;
private NoteView view;
public NotePresenter(Note model, NoteView view) {
this.model = model;
this.view = view;
}
public void loadNote() {
String content = model.getContent();
if (content != null && !content.isEmpty()) {
view.showNoteContent(content);
} else {
view.showError("메모 내용이 비어 있습니다.");
}
}
public void saveNoteContent(String content) {
if (content == null || content.trim().isEmpty()) {
view.showError("메모 내용을 입력해야 합니다.");
} else {
model.setContent(content);
view.showSaveSuccessMessage();
}
}
}
// ConsoleNoteView 클래스: 콘솔 기반으로 사용자에게 데이터를 출력하는 뷰 구현
public class ConsoleNoteView implements NoteView {
@Override
public void showNoteContent(String content) {
System.out.println("메모 내용: " + content);
}
@Override
public void showSaveSuccessMessage() {
System.out.println("메모가 성공적으로 저장되었습니다!");
}
@Override
public void showError(String errorMessage) {
System.out.println("오류: " + errorMessage);
}
}
// Main 클래스: MVP 패턴을 사용하여 메모 데이터를 관리하는 예시
public class Main {
public static void main(String[] args) {
// 초기 데이터 설정
Note model = new Note();
NoteView view = new ConsoleNoteView();
NotePresenter presenter = new NotePresenter(model, view);
// 메모 저장 및 출력
presenter.saveNoteContent("MVP 패턴 학습하기");
presenter.loadNote();
// 빈 메모 저장 시도
presenter.saveNoteContent("");
}
}
메모가 성공적으로 저장되었습니다!
메모 내용: MVP 패턴 학습하기
오류: 메모 내용을 입력해야 합니다.
MVP 패턴은 UI와 비즈니스 로직이 분리된 아키텍처로, 유지보수성과 테스트 용이성이 중요한 프로젝트에 적합하다.
아래 글에서 다른 아키텍쳐 패턴들을 확인할 수 있다.
아키텍처 패턴 모음