MVC 패턴

정윤서·2024년 1월 26일
0
post-custom-banner

MVC(Model-View-Controller)

MVC 패턴은 소프트웨어의 구조를 체계적으로 조직하기 위한 디자인 패턴 중 하나이다. 각각의 구성 요소는 독립적인 역할과 책임을 가지며, 애플리케이션의 유지보수성과 확장성을 높이는데 중점을 둔다.

MVC 패턴을 잘 이해하기 위해 MVC에 대한 설명과 자바를 사용한 사용자가 도서 목록을 볼 수 있고 새로운 도서를 추가할 수 있게 하는 '도서 관리' 애플리케이션의 간단한 예를 들어보겠다.

모델(Model)

  • 역할 : 애플리케이션의 데이터 및 비즈니스 로직 관리.
  • 특징 : 데이터베이스, 파일, 외부 서비스 등으로부터 데이터를 가져오고, 이 데이터를 가공하여 뷰에 전달한다.
public class Book {
    private String title;
    private String author;
    private int year;

    // 생성자, getter, setter 등
}

-> 모델은 도서에 관한 데이터를 표현. 'Book' 클래스를 만들어 도서 데이터 관리.

뷰(View)

  • 역할 : 사용자에게 데이터를 시각적으로 표현.
  • 특징 : 뷰는 모델로부터 받은 데이터를 사용자가 이해하기 쉬운 형태로 보여줌.
public class BookView {
    public void printBookDetails(Book book) {
        System.out.println("Book: ");
        System.out.println("Title: " + book.getTitle());
        System.out.println("Author: " + book.getAuthor());
        System.out.println("Year: " + book.getYear());
    }
}

-> 뷰틑 사용자에게 데이터를 어떻게 보여줄지를 정의. 도서 목록을 출력하는 메소드를 포함할 수 있음.

컨트롤러(Controlloer)

  • 역할 : 사용자의 입력을 받고 처리.
  • 특징 : 사용자의 입력을 받아 모델을 업데이트하거나 뷰를 변경. 컨트롤러는 뷰와 모델 사이의 중재자 역할을 함.
public class BookController {
    private Book model;
    private BookView view;

    public BookController(Book model, BookView view) {
        this.model = model;
        this.view = view;
    }

    public void setBookTitle(String title) {
        model.setTitle(title);
    }

    public void setBookAuthor(String author) {
        model.setAuthor(author);
    }

    public void setBookYear(int year) {
        model.setYear(year);
    }

    public void updateView() {
        view.printBookDetails(model);
    }
}

-> 컨트롤러는 사용자의 입력을 처리하고, 모델과 뷰를 연결한다. 예를 들어, 사용자로부터 새 도서 정보를 받아 모델을 없데이트하고, 뷰에게 이를 표시하도록 지시할 수 있다.

실행 예시

public class MVCPatternDemo {
    public static void main(String[] args) {
        // 모델 객체 생성
        Book model = retrieveBookFromDatabase();

        // 뷰 객체 생성
        BookView view = new BookView();

        // 컨트롤러 객체 생성
        BookController controller = new BookController(model, view);

        // 뷰 업데이트
        controller.updateView();

        // 모델 데이터 변경
        controller.setBookTitle("Java Programming");
        controller.setBookAuthor("Jane Doe");
        controller.setBookYear(2021);

        // 변경된 데이터로 뷰 업데이트
        controller.updateView();
    }

    private static Book retrieveBookFromDatabase() {
        // DB에서 도서 정보를 가져오는 것을 가정
        Book book = new Book();
        book.setTitle("Design Patterns");
        book.setAuthor("Erich Gamma");
        book.setYear(1994);
        return book;
    }
}

이 예시는 도서 정보를 관리하는 간단한 MVC 애플리케이션이다. 실제로는 데이터베이스와의 상호작용, 사용자 인터페이스의 복잡성, 예외 처리 등 더 많은 요소를 고려해야하지만 기본적인 MVC 패턴의 구조와 작동 방식은 유사하다.

MVC 패턴의 작동 방식

1. 사용자 액션

: 사용자가 인터페이스에서 어떤 동작을 하면 컨트롤러가 이를 감지.
ex) 사용자가 웹 페이지에서 '상품 목록 보기' 버튼 클릭.

2. 컨트롤러 처리

: 컨트롤러는 사용자의 요청에 따라 모델을 호출하거나 업데이트.
ex) 사용자의 클릭 감지. 모델에 상품 목록 데이터 요청.

3. 모델 업데이트

: 모델은 필요한 데이터 처리를 수행하고, 결과를 컨트롤러에 반환.
ex) 데이터베이스에서 상품 목록을 조회하여 컨트롤러에 반환.

4. 뷰 업데이트

: 컨트롤러는 모델로부터 받은 데이터를 바탕으로 뷰 업데이트.
ex) 컨트롤ㅓ는 모델로부터 받은 상품 목록을 뷰에 전달.

5. 사용자에게 표시

: 업데이트된 뷰가 사용자에게 표시된다.
ex) 뷰는 이를 사용자에게 보여줌.

MVC 패턴의 장점

1. 유지보수 용이성

: 각 구성 요소가 분리되어 있어, 하나를 변경해도 다른 부분에 영향을 덜 미침.

2. 모듈성

: 각 부분을 독립적으로 개발할 수 있어 팀 작업에 유리.

3. 재사용성

: 모델이나 뷰를 다른 애플리케이션에서 재사용 가능.

여기서는 MVC 패턴을 설명하기 위한 예시를 자바로 들었지만, MVC 패턴은 자바뿐만 아니라 다양한 프로그래밍 언어와 프레임워크에서 널리 사용되는 중요한 디자인 패턴이다. 이 패턴을 이해하고 적용함으로써, 효율적이고 유지 보수가 용이한 애플리케이션을 개발할 수 있다.

그런데 나는 프로그래밍을 하면서 MVC 패턴밖에 들어보고 사용한 적이 없었다.
프로그램을 설계할 때 사용할 수 있는 또 다른 디자인 패턴에는 어떤 것들이 있을까?

디자인 패턴의 종류

싱글톤 패턴 (Singleton Pattern)

  • 한 클래스의 인스턴스가 오직 하나만 생성되도록 보장.
    -> 데이터베이스 연결, 로거 등 전역적으로 하나만 존재해야하는 리소스 관리에 사용.

팩토리 메소드 패턴 (Factory Method Pattern)

  • 객체 생성을 서브 클래스에게 위임하여 객체 생성과 클래스 구현을 분리.
    -> 다양한 타입의 객체를 생성할 때 유연성을 제공.

추상 팩토리 패턴 (Abstract Factory Pattern)

  • 관련된 객체의 그룹을 생성하기 위한 인터페이스 제공.
    -> 서로 다른 스타일의 UI 요소 생성할 때 사용.

빌더 패턴 (Builder Pattern)

  • 복잡한 객체의 생성 과정을 단계별로 분리.
    -> 복잡한 객체(다양한 구성요소를 가진 복잡한 객체)를 생성할 때 사용.

프로토타입 패턴 (Prototype Pattern)

  • 기존 객체를 복제하여 새로운 객체 생성.
    -> 객체 생성 비용이 높을 때 초기 설정이 비슷한 객체를 여러 개 만들어야할 때 유용.

이 외에도 여러가지의 패턴이 존재하며, 이러한 패턴들은 서로 다른 상황과 요구 사항에 맞춰 소프트웨어 설계의 유연성, 재사용성, 유지보수성을 개선하는 데 도움을 준다. 프로젝트의 특정 요구에 가장 적합한 패턴을 선택하는 것이 중요하다.

post-custom-banner

0개의 댓글