안드로이드에서 MVVM패턴이 아키텍처 패턴이라고 알고 있었는데 MVVM이 디자인 패턴에 기입되어져 있는 책을 발견하고 혼동을 겪게 되었다. 그래서 생각해보니 내가 아키텍쳐 패턴과 디자인 패턴의 차이에 대해 잘 알고 있지 못한 것을 느끼게 되었고 이 포스팅을 통해 제대로 알고자 한다.
아키텍처 패턴
아키텍처 패턴(architectural pattern)은 주어진 문맥 안에서 소프트웨어 아키텍처의 공통적인 발생 문제에 대한 일반적인, 재사용 가능한 해결책을 의미한다. 아키텍처 패턴은 소프트웨어 디자인 패턴과 비슷하지만 더 넓은 범위에 속한다. 아키텍처 패턴은 소프트웨어 공학의 다양한 문제를 해결하는데, 예를 들어 컴퓨터 하드웨어 성능 제한, 비즈니스 위험의 최소화와 고가용성을 들 수 있다. 일부 아키텍처 패턴은 소프트웨어 프레임워크 안에 구현되어 있다. (위키백과 참조)
아키텍처
소프트웨어 아키텍처란 시스템을 구성하는 서브 시스템, 컴포넌트와 같이 구성요소 간의 관계를 관리하는 시스템의 구조이다.
디자인 패턴
디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것을 의미한다.
이 용어를 소프트웨어 개발 영역에서 구체적으로 처음 제시한 곳은 GoF(Gang of Four)라 불리는 네명의 컴퓨터 과학 연구자들이 쓴 서적 'Design Patterns: Elements of Reusable Object-Oriented Software'(재이용 가능한 객체지향 소프트웨어의 요소 - 디자인 패턴)이다. GoF는 컴퓨터 소프트웨어 공학 분야의 연구자인 에릭 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스의 네명을 지칭한다. (위키백과 참조)
이렇게 보면 둘다 문제가 발생하는 것에 대한 해결책이라는 느낌으로 비슷한 맥락으로 느껴질 수 있다.
두 패턴의 차이점에 대해 자세히 알아보자.
1. 아키텍처 패턴이 디자인 패턴보다 범위가 더 넓다.
디자인 패턴은 아키텍처 패턴이 비즈니스 문제에 대한 솔루션인 매우 구체적인 소프트웨어 관련 작업을 제공한다.
아키텍처 패턴은 아이디어의 추상적 관점에 더 중점을 두는 반면 디자인 패턴은 아이디어의 구현 관점에 중점을 둔다.
즉 디자인 패턴의 구현은 세부적인 수준에서 정의되며 아키텍처 패턴은 높은 수준에서 정의된다.
2. 하나의 아키텍처 패턴은 다양한 디자인 패턴을 사용하여 구현할 수 있다.
즉 아키텍처 패턴과 디자인 패턴 사이에는 일대다 관계에 있다.
그렇다면 MVVM은 아키텍처 패턴일까 디자인 패턴일까?
디자인 패턴은 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데 쓰이는 관행이고,
아키텍처 패턴은 모든 패키지 구조의 영향을 미친다는 점을 참고하였을때,
MVVM의 경우 Model, View, ViewModel로 앱의 모든 패키지 구조에 영향을 미치기 때문에 아키텍처 패턴이다.
MVVM은 디자인 패턴을 사용하여 구현한 아키텍처 패턴이다.
MVVM은 데이터 바인딩을 통해 View와 ViewModel간의 효율적인 통신을 가능하게 하며, 이것이 디자인 패턴 중 하나인 Observer패턴과 관련이 있다.
그러나 MVVM은 디자인 패턴의 일종으로 간주되기도 한다.
MVVM은 일반적인 Architecture Componets에서는 아키텍처 패턴으로 존재 하지만 MVVM보다 더 큰 범위에 패턴이 등장하여 MVVM이 영향을 끼치지 못하는 패키지가 생긴다면 그때 MVVM은 디자인 패턴이 될것이다.
마치며 ...
이제까지 내가 프로젝트에 구현한 MVVM은 아키텍처 패턴이었던 것 같다. 아키텍처 패턴과 디자인 패턴을 많이 혼동했었는데 아키텍처가 더 넓은 범위를 다룬다는 점을 알게 되었다.
'DesignPattern' 카테고리의 다른 글
[DesignPattern] 의존성 주입(Dependency Injection) 왜 필요한가 (0) | 2023.09.19 |
---|