맨위로가기

모델-뷰-프리젠터

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

모델-뷰-프레젠터(MVP)는 사용자 인터페이스 아키텍처 패턴 중 하나로, 1990년대 초 탤리전트에서 시작되었다. MVP는 테스트 자동화를 용이하게 하고 프레젠테이션 로직의 관심사 분리를 개선하기 위해 설계되었으며, 모델, 뷰, 프레젠터의 세 가지 구성 요소로 이루어진다. 모델은 데이터를 정의하고, 뷰는 데이터를 표시하며 사용자 명령을 프레젠터로 전달한다. 프레젠터는 모델과 뷰를 연결하여 데이터를 가져오고 뷰에 표시하는 역할을 한다. MVP는 .NET, Java, PHP 등 다양한 환경에서 구현될 수 있으며, 코드 재사용성 및 유지보수성을 높이는 장점이 있다.

더 읽어볼만한 페이지

  • 아키텍처 패턴 - 서비스 지향 아키텍처
    서비스 지향 아키텍처(SOA)는 기능들을 독립적인 서비스 단위로 분리하여 느슨하게 결합함으로써, 네트워크를 통해 접근 가능한 서비스를 재사용하고 결합하여 응용 프로그램을 구축하는 소프트웨어 아키텍처이다.
  • 아키텍처 패턴 - 제어 반전
    제어 반전은 프로그램의 제어 흐름을 프레임워크나 컨테이너가 관리하도록 하는 프로그래밍 원칙으로, 코드 결합도를 낮추고 유연성을 높이지만, 복잡성을 증가시킬 수 있다는 비판도 존재한다.
  • 소프트웨어 디자인 패턴 - 모델-뷰-컨트롤러
    모델-뷰-컨트롤러(MVC)는 소프트웨어 디자인 패턴으로, 응용 프로그램을 모델, 뷰, 컨트롤러 세 가지 요소로 분리하여 개발하며, 사용자 인터페이스 개발에서 데이터, 표현 방식, 사용자 입력 처리를 분리해 유지보수성과 확장성을 높이는 데 기여한다.
  • 소프트웨어 디자인 패턴 - 스케줄링 (컴퓨팅)
    스케줄링은 운영 체제가 시스템의 목적과 환경에 맞춰 작업을 관리하는 기법으로, 장기, 중기, 단기 스케줄러를 통해 프로세스를 선택하며, CPU 사용률, 처리량 등을 기준으로 평가하고, FCFS, SJF, RR 등의 알고리즘을 사용한다.
모델-뷰-프리젠터
모델-뷰-프리젠터
유형디자인 패턴
하위 유형소프트웨어 아키텍처 패턴
목적사용자 인터페이스 로직 구현 분리
솔루션모델, 뷰, 프리젠터로 역할 분담
관련 패턴모델-뷰-컨트롤러 (MVC)
모델-뷰-업데이터 (MVU)
프레젠테이션-추상화-제어 (PAC)
개요
문제사용자 인터페이스 로직의 복잡성 증가
테스트의 어려움
유지보수의 어려움
해결책모델, 뷰, 프리젠터로 역할 분리
뷰는 사용자 인터페이스 표시 담당
프리젠터는 뷰와 모델 사이의 중재자 역할
모델은 데이터와 비즈니스 로직 담당
장점테스트 용이성 향상
유지보수성 향상
코드 재사용성 향상
단점클래스 수 증가
복잡성 증가 가능성
구성 요소
모델데이터와 비즈니스 로직을 캡슐화
뷰와 프리젠터에 독립적
데이터 변경 시 프리젠터에 알림
사용자 인터페이스 표시
사용자 입력 처리
프리젠터에 사용자 입력 전달
프리젠터뷰와 모델 사이의 중재자
모델에서 데이터를 가져와 뷰에 표시
뷰에서 사용자 입력을 받아 모델에 전달
뷰의 상태 관리
사용 예시
웹 애플리케이션구글 웹 툴킷 (GWT)
스프링 프레임워크
데스크톱 애플리케이션닷넷 프레임워크
추가 정보
참고 자료구글 웹 툴킷 (GWT) 프로젝트

2. 역사

모델-뷰-프리젠터 소프트웨어 패턴은 1990년대 초 애플, IBM, 휴렛 팩커드의 합작 벤처인 탤리전트에서 시작되었다.[2] MVP는 탤리전트의 C++-기반 CommonPoint 환경에서 애플리케이션 개발을 위한 기본적인 프로그래밍 모델이었다. 이 패턴은 이후 탤리전트에 의해 자바로 이식되었고, 탤리전트 CTO 마이크 포텔의 논문을 통해 널리 알려졌다.[3] 1998년 탤리전트가 중단되었다.[4]

2. 1. 탤리전트

모델-뷰-프리젠터 소프트웨어 패턴은 1990년대 초 애플(Apple Inc.), IBM, 휴렛 팩커드의 합작 벤처인 탤리전트에서 시작되었다.[2] MVP는 탤리전트의 C++-기반 CommonPoint 환경에서 애플리케이션 개발을 위한 기본적인 프로그래밍 모델이었다. 이 패턴은 이후 탤리전트에 의해 자바로 이식되었고, 탤리전트 CTO 마이크 포텔의 논문을 통해 널리 알려졌다.[3] 1998년 탤리전트가 중단되었다.[4]

2. 2. 돌핀 스몰토크

2. 3. 마이크로소프트

2. 4. 마틴 파울러

3. 구성 요소

MVP는 테스트 자동화를 용이하게 하고 프레젠테이션 로직의 관심사 분리를 개선하기 위해 설계된 사용자 인터페이스 아키텍처 패턴(컴퓨터 과학)이다.

; 모델 (Model)

: 모델은 사용자 인터페이스에서 표시하거나 그 외에 작용할 데이터를 정의하는 인터페이스이다.

; 뷰 (View)

: 뷰는 데이터를 표시하고(모델) 사용자 명령(이벤트(컴퓨팅))을 해당 데이터에 작용하도록 프레젠터로 라우팅하는 수동적인 인터페이스이다. 일반적으로 뷰 구현은 구체적인 프레젠터 객체를 인스턴스(컴퓨터 과학)화하여 자체에 대한 참조를 제공한다.

다음 C 샤프(프로그래밍 언어) 코드는 간단한 뷰 생성자를 보여준다.

```csharp

public class Presenter : IPresenter

{

public Presenter(IView view)

{

// ...

}

}

public class View : IView

{

private IPresenter _presenter;

public View()

{

_presenter = new Presenter(this);

}

}

```

뷰에서 허용되는 로직의 정도는 구현에 따라 다르다. 한 극단적인 경우, 뷰는 완전히 수동적이며 모든 상호 작용 작업을 프레젠터로 전달한다. 사용자가 뷰의 이벤트 메서드를 트리거할 때 매개변수도 없고 반환 값도 없는 프레젠터의 메서드를 호출하는 것 외에는 아무것도 수행하지 않는다. 그런 다음 프레젠터는 뷰 인터페이스에 의해 정의된 메서드를 통해 뷰에서 데이터를 검색한다. 마지막으로 프레젠터는 모델에 작용하고 작업 결과로 뷰를 업데이트한다. 모델-뷰-프레젠터의 다른 버전에서는 특정 상호 작용, 이벤트 또는 명령을 처리하는 클래스에 대해 어느 정도의 위도를 허용한다. 이는 클라이언트의 브라우저에서 실행되는 뷰가 특정 상호 작용 또는 명령을 처리하기에 가장 적합할 수 있는 웹 기반 아키텍처에 더 적합한 경우가 많다.

; 프레젠터 (Presenter)

: 프레젠터는 모델과 뷰에 작용한다. 저장소(모델)에서 데이터를 검색하고 뷰에 표시하도록 형식을 지정한다.

레이어링 관점에서 프레젠터 클래스는 다층 아키텍처 시스템의 애플리케이션 레이어에 속하는 것으로 간주될 수 있지만, 애플리케이션 레이어와 사용자 인터페이스 레이어 사이의 자체 프레젠터 레이어로 볼 수도 있다.

3. 1. 모델 (Model)

모델은 사용자 인터페이스에서 표시하거나 그 외에 작용할 데이터를 정의하는 인터페이스이다.

3. 2. 뷰 (View)

뷰는 데이터를 표시하고(모델) 사용자 명령(이벤트(컴퓨팅))을 해당 데이터에 작용하도록 프레젠터로 라우팅하는 수동적인 인터페이스이다. 일반적으로 뷰 구현은 구체적인 프레젠터 객체를 인스턴스(컴퓨터 과학)화하여 자체에 대한 참조를 제공한다.

다음 C 샤프(프로그래밍 언어) 코드는 간단한 뷰 생성자를 보여준다.

```csharp

public class Presenter : IPresenter

{

public Presenter(IView view)

{

// ...

}

}

public class View : IView

{

private IPresenter _presenter;

public View()

{

_presenter = new Presenter(this);

}

}

```

뷰에서 허용되는 로직의 정도는 구현에 따라 다르다. 한 극단적인 경우, 뷰는 완전히 수동적이며 모든 상호 작용 작업을 프레젠터로 전달한다. 사용자가 뷰의 이벤트 메서드를 트리거할 때 매개변수도 없고 반환 값도 없는 프레젠터의 메서드를 호출하는 것 외에는 아무것도 수행하지 않는다. 그런 다음 프레젠터는 뷰 인터페이스에 의해 정의된 메서드를 통해 뷰에서 데이터를 검색한다. 마지막으로 프레젠터는 모델에 작용하고 작업 결과로 뷰를 업데이트한다. 모델-뷰-프레젠터의 다른 버전에서는 특정 상호 작용, 이벤트 또는 명령을 처리하는 클래스에 대해 어느 정도의 위도를 허용한다. 이는 클라이언트의 브라우저에서 실행되는 뷰가 특정 상호 작용 또는 명령을 처리하기에 가장 적합할 수 있는 웹 기반 아키텍처에 더 적합한 경우가 많다.

3. 3. 프리젠터 (Presenter)

MVP는 테스트 자동화를 용이하게 하고 프레젠테이션 로직의 관심사 분리를 개선하기 위해 설계된 사용자 인터페이스 아키텍처 패턴(컴퓨터 과학)이다.

  • ''프레젠터''는 모델과 뷰에 작용한다. 저장소(모델)에서 데이터를 검색하고 뷰에 표시하도록 형식을 지정한다.


일반적으로 뷰 구현은 구체적인 프레젠터 객체를 인스턴스(컴퓨터 과학)화하여 자체에 대한 참조를 제공한다.

C 샤프(프로그래밍 언어) 코드 예시:



public class Presenter : IPresenter

{

public Presenter(IView view)

{

// ...

}

}

public class View : IView

{

private IPresenter _presenter;

public View()

{

_presenter = new Presenter(this);

}

}



뷰에서 허용되는 로직의 정도는 구현에 따라 다르다. 한 극단적인 경우, 뷰는 완전히 수동적이며 모든 상호 작용 작업을 프레젠터로 전달한다. 이 공식에서 사용자가 뷰의 이벤트 메서드를 트리거할 때 매개변수도 없고 반환 값도 없는 프레젠터의 메서드를 호출하는 것 외에는 아무것도 수행하지 않는다. 그런 다음 프레젠터는 뷰 인터페이스에 의해 정의된 메서드를 통해 뷰에서 데이터를 검색한다. 마지막으로 프레젠터는 모델에 작용하고 작업 결과로 뷰를 업데이트한다. 모델-뷰-프레젠터의 다른 버전에서는 특정 상호 작용, 이벤트 또는 명령을 처리하는 클래스에 대해 어느 정도의 위도를 허용한다. 이는 클라이언트의 브라우저에서 실행되는 뷰가 특정 상호 작용 또는 명령을 처리하기에 가장 적합할 수 있는 웹 기반 아키텍처에 더 적합한 경우가 많다.

레이어링 관점에서 프레젠터 클래스는 다층 아키텍처 시스템의 애플리케이션 레이어에 속하는 것으로 간주될 수 있지만, 애플리케이션 레이어와 사용자 인터페이스 레이어 사이의 자체 프레젠터 레이어로 볼 수도 있다.

4. 구현

4. 1. .NET

.NET 환경은 다른 개발 환경과 마찬가지로 모델-뷰-프리젠터(MVP) 패턴을 지원한다. 동일한 모델 및 프레젠터 클래스를 사용하여 ASP.NET 웹 애플리케이션 또는 Windows Forms 애플리케이션과 같은 여러 인터페이스를 지원할 수 있다. 프레젠터는 인터페이스(뷰) 구성 요소에서 액세스할 수 있는 인터페이스를 통해 뷰에서 정보를 가져오고 설정한다.

패턴을 수동으로 구현하는 것 외에도 모델-뷰-프레젠터 프레임워크를 사용하여 MVP 패턴을 보다 자동화된 방식으로 지원할 수 있다.

4. 2. Java

자바 (AWT, 스윙, SWT) 애플리케이션에서 MVP 패턴은 사용자 인터페이스 클래스가 뷰 인터페이스를 구현하도록 함으로써 사용할 수 있다.

이와 동일한 접근 방식은 자바 기반 웹 애플리케이션에도 사용할 수 있는데, 최신 자바 컴포넌트 기반 웹 프레임워크는 씬 클라이언트와 동일한 컴포넌트 방식으로 클라이언트 측 로직 개발을 허용하기 때문이다.

구글 웹 툴킷에서 MVP를 구현하려면 일부 컴포넌트가 뷰 인터페이스를 구현하기만 하면 된다. Vaadin 또는 에코2 웹 프레임워크를 사용하여 동일한 접근 방식을 사용할 수 있다.

자바 프레임워크는 다음과 같다.

4. 3. PHP

PHP의 유연한 런타임 환경으로 인해, 애플리케이션 로직을 구현하는 다양한 방법이 존재한다. 모델 계층의 구현은 최종 애플리케이션 프로그래머에게 위임된다.

PHP 프레임워크는 다음과 같다.

5. 장점

6. 단점

참조

[1] 웹사이트 GWT Project https://developers.g[...]
[2] 문서 Needs research - This model was in use in the ERP space (Lawson Software Inc.) long before this.
[3] 기타 MVP: Model-View-Presenter. The Taligent Programming Model for C++ and Java. http://www.wildcrest[...]
[4] 기타 Twisting the Triad. The evolution of the Dolphin Smalltalk MVP application framework. http://www.object-ar[...]
[5] 웹사이트 MSDN Magazine Issues http://msdn.microsof[...] 2019-10-07
[6] 웹사이트 The Model-View-Presenter (MVP) Pattern http://msdn.microsof[...] 2010-04-27
[7] 기타 GUI Architectures http://www.martinfow[...]
[8] 웹사이트 Interactive Application Architecture Patterns http://www.aspiringc[...]
[9] 웹인용 GWT Project https://developers.g[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com