JAVA 자바 디자인 패턴 : MVC 패턴, MVP 패턴, MVVM 패턴 장점 단점, 예시

2024. 4. 16. 22:30코딩/코딩 테스트

 

JAVA 자바 디자인 패턴 : MVC 패턴


MVC 패턴(Model-View-Controller)은 사용자 인터페이스를 구현하기 위해 사용되는 디자인 패턴으로, 애플리케이션을 세 가지 주요 구성 요소로 나누어 관리합니다:

  1. 모델(Model): 데이터와 비즈니스 로직을 처리합니다. 애플리케이션의 데이터 구조를 정의하고 데이터베이스와의 상호작용 및 비즈니스 규칙을 담당합니다.
  2. 뷰(View): 사용자에게 정보를 표시하는 방법(사용자 인터페이스)을 정의합니다. 모델이 가지고 있는 정보를 받아 사용자에게 보여주는 역할을 합니다.
  3. 컨트롤러(Controller): 사용자의 입력을 받아 처리하는 부분으로, 사용자의 입력에 따라 모델과 뷰를 업데이트합니다.

 

 

 

자바 스윙을 사용한 MVC 예시

다음은 자바 스윙을 사용하여 간단한 계산기 애플리케이션의 MVC 구조를 구현한 예시입니다.

 

import javax.swing.*;
import java.awt.event.*;

// 모델: 계산기의 데이터와 비즈니스 로직을 처리
class CalculatorModel {
    private int calculationValue;

    public void addTwoNumbers(int firstNumber, int secondNumber){
        calculationValue = firstNumber + secondNumber;
    }

    public int getCalculationValue(){
        return calculationValue;
    }
}

// 뷰: 사용자 인터페이스를 구현
class CalculatorView extends JFrame {
    private JTextField firstNumber  = new JTextField(10);
    private JLabel additionLabel = new JLabel("+");
    private JTextField secondNumber = new JTextField(10);
    private JButton calculateButton = new JButton("Calculate");
    private JTextField calcSolution = new JTextField(10);

    CalculatorView(){
        JPanel calcPanel = new JPanel();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(600, 200);

        calcPanel.add(firstNumber);
        calcPanel.add(additionLabel);
        calcPanel.add(secondNumber);
        calcPanel.add(calculateButton);
        calcPanel.add(calcSolution);
        this.add(calcPanel);
    }

    public int getFirstNumber(){
        return Integer.parseInt(firstNumber.getText());
    }

    public int getSecondNumber(){
        return Integer.parseInt(secondNumber.getText());
    }

    public void setCalcSolution(int solution){
        calcSolution.setText(Integer.toString(solution));
    }

    void addCalculateListener(ActionListener listenForCalcButton){
        calculateButton.addActionListener(listenForCalcButton);
    }
}

// 컨트롤러: 입력 처리와 모델-뷰 업데이트
class CalculatorController {
    private CalculatorView theView;
    private CalculatorModel theModel;

    public CalculatorController(CalculatorView theView, CalculatorModel theModel) {
        this.theView = theView;
        this.theModel = theModel;
        this.theView.addCalculateListener(new CalculateListener());
    }

    class CalculateListener implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            int firstNumber, secondNumber = 0;

            try{
                firstNumber = theView.getFirstNumber();
                secondNumber = theView.getSecondNumber();

                theModel.addTwoNumbers(firstNumber, secondNumber);
                theView.setCalcSolution(theModel.getCalculationValue());
            }
            catch(NumberFormatException ex){
                System.out.println(ex);
                JOptionPane.showMessageDialog(theView, "Please enter two integers");
            }
        }
    }
}

public class MVCCalculator {
    public static void main(String[] args) {
        CalculatorView theView = new CalculatorView();
        CalculatorModel theModel = new CalculatorModel();
        new CalculatorController(theView, theModel);
        theView.setVisible(true);
    }
}

 

MVC 패턴의 장점

  1. 분리된 관심사: MVC는 애플리케이션의 입력 로직, 비즈니스 로직, UI 로직을 서로 분리하여 관리하므로, 유지보수 및 확장성이 향상됩니다.
  2. 재사용성 증가: 모델이 뷰와 컨트롤러로부터 독립되어 있기 때문에, 모델을 다양한 인터페이스에 재사용할 수 있습니다.
  3. 개발 효율성: 여러 개발자가 모델, 뷰, 컨트롤러 각각을 동시에 개발할 수 있어 개발 시간을 단축할 수 있습니다.

MVC 패턴의 단점

  1. 복잡성 증가: 작은 프로젝트나 단순한 애플리케이션에 MVC 패턴을 적용하면 오히려 구조가 불필요하게 복잡해질 수 있습니다.
  2. 성능 이슈: 모델, 뷰, 컨트롤러 간의 지속적인 데이터 교환은 처리 속도를 저하시킬 수 있습니다.
  3. 뷰와 모델 간의 은밀한 의존성: 뷰가 모델을 직접 호출하게 되는 경우가 많아, 완벽한 분리가 어려울 수 있습니다.

 

 

 

 

 


JAVA 자바 디자인 패턴 : MVC 패턴

 

MVP 패턴(Model-View-Presenter)은 MVC(Model-View-Controller) 패턴의 변형으로, 사용자 인터페이스 관련 소프트웨어 개발에서 널리 사용됩니다. MVP 패턴은 특히 프레젠테이션 로직을 뷰에서 완전히 분리하려는 목적으로 설계되었습니다. 이 패턴은 애플리케이션의 프레젠테이션 로직을 처리하는 세 가지 구성 요소로 나눕니다:

 

  1. 모델(Model): 데이터와 비즈니스 로직을 담당합니다. 데이터의 상태 변화를 저장하고 관리합니다.
  2. 뷰(View): 사용자에게 보이는 UI 구성 요소입니다. HTML, CSS, JavaScript 등을 사용하여 구현할 수 있으며, 사용자 입력을 받아 프레젠터에 전달합니다.
  3. 프레젠터(Presenter): 뷰와 모델 사이의 인터페이스를 관리합니다. 모든 프레젠테이션 로직을 담당하며, 뷰로부터 입력을 받아 모델을 업데이트하고, 모델의 변경 사항을 뷰에 반영합니다.

 

 

 

MVP 패턴의 장점

  1. 테스트 용이성: 프레젠터는 뷰와 직접적으로 결합되어 있지 않기 때문에, 유닛 테스트가 용이합니다.
  2. 분리된 관심사: UI와 비즈니스 로직이 명확히 분리되어 있어 각 부분의 독립적인 개발과 수정이 용이합니다.
  3. 재사용성 증가: 프레젠터는 뷰의 구체적인 구현에 대해 알 필요가 없기 때문에, 다양한 뷰에 재사용할 수 있습니다.

 

MVP 패턴의 단점

  1. 복잡성 증가: 비교적 단순한 애플리케이션에서 MVP 패턴을 사용하면 과도한 복잡성이 추가될 수 있습니다.
  2. 개발 시간 증가: 분리된 구성 요소들을 관리하면서 발생하는 추가적인 개발 시간이 필요합니다.
  3. 리소스 요구량 증가: 더 많은 클래스와 인터페이스를 정의해야 하므로, 리소스 요구량이 증가할 수 있습니다.

 

 

 

 

 

 


 

JAVA 자바 디자인 패턴 : MVC 패턴

 

MVVM 패턴(Model-View-ViewModel)은 사용자 인터페이스의 설계를 위한 아키텍처 패턴으로, 특히 데이터 바인딩을 중심으로 하는 현대의 UI 개발 프레임워크에서 널리 사용됩니다. MVVM은 주로 WPF, Silverlight, natively in AngularJS, Vue.js, ReactJS (with Redux or MobX) 및 다른 프로그래밍 환경에서 사용됩니다. 이 패턴은 복잡한 사용자 인터페이스의 개발을 단순화하고, 테스트와 유지보수를 용이하게 하기 위해 설계되었습니다.

 

 

MVVM 패턴의 구성 요소

  1. 모델(Model): 비즈니스 로직과 데이터의 접근 계층을 처리합니다. 데이터 모델은 비즈니스 규칙을 포함할 수 있으며, 데이터 저장소와의 통신을 담당합니다.
  2. 뷰(View): 사용자에게 보여지는 UI 요소입니다. 사용자의 입력을 받고, 사용자에게 정보를 시각적으로 표시합니다.
  3. 뷰모델(ViewModel): 뷰와 모델 사이의 매개체 역할을 합니다. 뷰모델은 명령(command)과 데이터 바인딩을 통해 뷰의 상태와 동작을 캡슐화합니다. 뷰모델은 모델에서 데이터를 래핑하고 뷰가 이해할 수 있는 형태로 가공하여 뷰에 전달합니다.

 

 

 

 

 

MVVM 패턴의 장점

  1. 강력한 데이터 바인딩: 데이터 바인딩을 통해 뷰와 뷰모델 간의 동기화가 자동으로 이루어져, 코드의 양을 줄이고 복잡성을 감소시킬 수 있습니다.
  2. 분리된 관심사: 뷰모델은 뷰로부터 UI 로직을 분리하여, 비즈니스 로직과 프레젠테이션 로직의 독립적인 개발과 테스트가 가능합니다.
  3. 재사용성과 유지보수성 향상: 뷰모델은 플랫폼에 독립적이므로, 다양한 뷰 또는 플랫폼 간에 재사용이 가능합니다.

 

MVVM 패턴의 단점

  1. 초기 구현 복잡성: MVVM의 구현은 초기 학습 곡선이 높고 설정에 시간이 소요됩니다.
  2. 성능 문제: 대규모 데이터 바인딩이 많은 애플리케이션에서 성능 이슈가 발생할 수 있습니다.
  3. 과도한 추상화: 때때로 뷰모델과 모델 간에 과도한 추상화 레이어가 필요하게 되어 애플리케이션의 복잡성이 증가할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

JAVA 자바 디자인 패턴 : MVC 패턴, MVP 패턴, MVVM 패턴 장점 단점, 예시