STUDY
아키텍처 패턴, 디자인 패턴, MVC, MVP, MVVM
연나연
2025. 2. 12. 13:49
mvvm패턴에 대해서 공부하려 서치를 하니 누구는 디자인 패턴 중에 mvvm이 있다고 하고 누구는 아키텍처 패턴 중 mvvm이 있다고 해서,, 내가 아는 디자인패턴은 생구행 뿐인데 (생성,구조,행위 패턴). 그래서 디자인패턴을 다른 곳에서도 그렇게 부르는건가뭔가 혼동이 와서 공부하는 이 part.
학습목표
1. 아키텍쳐 패턴이 무엇인지 알수있다.
2. 아키텍쳐 패턴과 디자인 패턴을 구분할 수 있다.
3, 아키텍쳐 패턴의 종류를 알 수 있다.
이어서 다음 글에서는 MVVM에 대하여 알아볼 것이다.
소프트웨어 아키텍쳐 패턴이란?
- 시스템의 기본 구조이자 시스템을 구성하는 요소와 각 요소 간의 관계를 정의하는 일종의 청사진
- 소프트웨어의 전체적인 그림을 만드는 솔루션
- 주어진 상황에서의 소프트웨어 아키텍쳐에서 일반적으로 발생하는 문제점들에 대한 일반화되고 재사용 가능한 솔루션.
- 서로 다른 시스템과 환경에서 시도되고 시험된 바람직한 사례를 양식화하고 추상화한 기술
- 체계적인 소프트웨어 설계의 기본이며 자주 사용하는 모형들을 정립한 하나의 약속이라 볼 수 있다.
아키텍쳐 패턴의 특징
- 시스템의 주요 속성을 결정하고, 개발 과정의 중요한 설계 결정을 통제하는 역할을 한다.
- 각 구조는 소프트웨어 요소, 이들 간의 관계, 요소와 관계의 속성으로 구성
- 확장가능하며 유지보수 가능한 유연한 소프트웨어 아키텍처를 만들기 위한 필수 원칙 SOLID (객체 지향 설계 원칙) 이 있다.
아키텍쳐 패턴 기본원리
1. 모듈화
- 시스템의 기능들을 모듈 단위로 나누는 것, 이때 모듈 개수는 적당히, 너무 많은 경우 통합비용이, 너무 적을 경우 모듈 하나의 개발 비용이 많이 들게 됨.
2. 추상화
- 전체적이고 포괄적인 개념 설계, 차례로 세분화, 구체화
3. 단계적 분해
- 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키며 분할
4. 정보 은닉
- 한 모듈 내부에 포함된 절차와 자료를 숨기며 독립적 수행을 가능캐 해, 다른 모듈이 접근하거나 변경하지 못하게 하기.
소프트웨어 디자인 패턴 이란?
- 소프트웨어 디자인에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책
- 프로그래머가 어플리케이션이나 시스템을 디자일할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 패턴
아키텍쳐 패턴과 디자인 패턴의 차이
- 아키텍쳐 패턴은 소프트웨어 디자인 패턴과 유사하지만 더 큰 범주에 속함.
- 소프트웨어 아키텍쳐패턴은 한 소프트웨어의 뼈대, 고수준의 기반을 담당하고 소프트웨어 디자인 패턴은 각각의 모듈들이 어떤 것을 하는지, 클래스의 범위, 함수의 목적 등 코드 수준의 디자인을 담당한다.
- 아키텍쳐 패턴은 더 큰 뼈대, 디자인 패턴은 코드 수준에서의 설계를 담당한다.
아키텍쳐 패턴의 종류
계층화 패턴 (Layered pattern)
클라이언트-서버 패턴 (Client-server pattern)
마스터-슬레이브 패턴 (Master-slave pattern)
파이프-필터 패턴 (Pipe-filter pattern)
브로커 패턴 (Broker pattern)
피어 투 피어 패턴 (Peer-to-peer pattern)
이벤트-버스 패턴 (Event-bus pattern)
MVC 패턴 (Model-view-controller pattern)
블랙보드 패턴 (Blackboard- pattern)
인터프리터 패턴 (Interpreter pattern)
MVC 패턴 (Model - View - Controller)
- mvc 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)의 세 부분으로 구성
- 가장 널리 사용 ?
- mvc패턴은 각 부분의 역할을 명확하게 분리함으로써, 코드의 가독성과 유지보수성을 높인다.
- 모델(Model) : 데이터와 비즈니스 로직을 처리, 데이터를 가져오고 변경하는 메서드를 가지고있으며, 데이터 변경 시에는 이를 관리하는 컴포넌트로 알린다.
- 뷰(View) : 사용자 인터페이스를 담당. 모델의 데이터를 보여주고, 사용자 입력을 받아 모델에 전달
- 컨트롤러(Controller) : 모델과 뷰 사이의 상호작용을 관리, 어플리케이션의 흐름을 제어, 뷰에서 입력을 받아 모델에 전달하거나, 모델에서 변경된 데이터를 가져와 뷰에 반영
장점) - 구조가 단순하고 이해하기 쉬움
- 다양한 프로젝트에 적용할 수 있다는 것
단점) - 뷰와 모델 사이의 강한 결합으로 인해 테스트와 유지보수가 어려울 수 있다


MVVM 패턴 (Model - View - ViewModel)
- MVVM은 모델(Model), 뷰(View), 뷰모델(ViewModel)의 세 부분으로 구성
- MVC 패턴의 단점을 보완하기 위해 등장
- 뷰와 모델 사이의 결합을 줄이고, 데이터 바인딩을 통해 뷰와 뷰모델 사이의 상호작용을 자동화 한다.
장점) 뷰와 비즈니스 로직의 분리가 잘 되어있어, 코드의 재사용성과 테스트 용이성이 높다.
단점) 구현의 복잡성이 증가할 수 있다.

MVP 패턴 (Model - View - Presenter)
- MVP는 모델(Model), 뷰(View), 프레젠터 (Presenter)의 세 부분으로 구성
- 모델(Model) : 애플리케이션의 비즈니스 로직과 데이터를 담당하는 부분
- 뷰(View) : 사용자 인터페이스를 담당하는 부분, 모델에 직접 접근하지 않으며, 프레젠터를 통해 모델과 상호작용한다.
- 프레젠터 (Presenter) : 뷰와 모델 사이의 중간자 역할. 뷰로부터 입력을 받아 모델에 전달하고, 모델로부터 데이터를 받아 뷰에 전달합니다.

여기저기 많이 찾아보며 작성했는데 아래 블로그가 가장 설명을 잘해놓으셨다 ¡ 굿
한 번의 글로 이해하는 소프트웨어 아키텍처 패턴 ( MVC, MVP, MVVM )