15. 컴파운드 패턴

AlmondGood·2022년 7월 30일
0

디자인패턴

목록 보기
16/16

저번 프록시 패턴을 마지막으로 <헤드 퍼스트: 디자인 패턴>에 실린
주요 14가지의 패턴을 모두 알아보았습니다.

14가지 패턴 이외에도 많은 패턴이 있고, 새로운 패턴들이 발견되고 있습니다.

하지만, 이제 막 객체 지향 프로그래밍에 입문한 개발자로서
세상의 모든 디자인 패턴을 다 알 수 없고, 알 필요도 없습니다. 이해하기도 어렵구요.
그러니 우리는 가진 것만이라도 잃어버리지 않도록 체화하고, 활용해야 합니다.




컴파운드 패턴(Compound Pattern)

컴파운드 패턴이란, 여러 가지의 패턴을 복합적으로 사용해서 일반적인 문제를 해결할 수 있는 패턴입니다.

여러 가지 패턴이라고 해서, 패턴을 몇 개 섞어 쓰는 것만으로 컴파운드 패턴이 되는 것은 아닙니다.
복합 사용된 패턴들이, 다른 디자인 패턴들처럼 일반적인 문제를 해결할 수 있어야 컴파운드 패턴이라고 할 수 있습니다.

이런 컴파운드 패턴 중에서 가장 대표적인 것이 MVC 패턴, MVP 패턴, MVVM 패턴이라고 할 수 있습니다.




MVC 패턴

MVC는 Model-View-Controller의 약자로 모델, 뷰, 컨트롤러로 이루어져 있습니다.

View : 사용자와 직접 상호작용 하는 부분입니다. UI라고 볼 수 있습니다.

Controller : 사용자로부터 입력을 받아 어떤 명령인지 파악하고, 모델에 명령을 넘겨줍니다.

Model : 모든 데이터(+ 상태, 로직 등)가 저장되어 있는 부분입니다.
컨트롤러로부터 명령을 받아 데이터를 처리하고, 변경사항이 있으면 뷰로 상태를 넘겨줍니다.


처리 순서

  1. 사용자의 입력이 Controller로 들어오면,
  2. Controller가 사용자의 입력을 확인하고, Model을 업데이트합니다.
  3. Controller가 Model을 나타낼 View를 선택합니다.
  4. View가 Model을 이용하여 데이터를 출력합니다.

처리 순서(카카오톡 비유)

  1. 사용자가 채팅을 Controller로 보내면,
  2. Controller는 이미지인지 채팅인지 형식을 확인하고, 그에 맞는 Model의 메소드를 호출합니다.
  3. Controller가 채팅 포맷의 View를 선택합니다.
  4. View가 Model을 이용하여 화면을 출력합니다.

이 패턴은 가장 보편적으로 사용되는 패턴이지만 View와 Model의 의존성이 높다는 문제점이 있습니다.




MVP 패턴

MVP는 Model-View-Presenter의 약자로 모델, 뷰, 프레젠터로 이루어져 있습니다.

View : 위와 동일
Model : 위와 동일
Presenter : Controller와 역할은 비슷하지만, View와 Model이 상호작용하지 않고 Presenter를 통해 교류합니다.


처리 순서

  1. 사용자의 입력이 View로 들어옵니다.
  2. View가 데이터를 Presenter에 요청합니다.
  3. Presenter는 Model에 데이터를 요청합니다.
  4. Model이 처리한 데이터를 Presenter에 넘겨줍니다.
  5. Presenter가 View에 데이터를 넘겨줍니다.
  6. View는 Presenter의 데이터를 출력합니다.

처리 순서(카카오톡 비유)

  1. 사용자가 View에 채팅을 입력합니다.
  2. View가 채팅 출력을 Presenter에 요청합니다.
  3. Presenter는 Model에 채팅 출력을 요청합니다.
  4. Model이 처리한 화면을 Presenter에 넘겨줍니다.
  5. Presenter가 View에 화면을 넘겨줍니다.
  6. View는 Presenter의 화면을 출력합니다.

위의 문제점이었던 View-Model간의 의존성 문제를 해결했지만,
이번엔 View와 Presenter의 의존성이 높아지게 되었습니다.




MVVM 패턴

MVVM은 Model-View-ViewModel의 약자로 모델, 뷰, 뷰모델로 이루어져 있습니다.

View : 위와 동일
Model : 위와 동일
ViewModel : View를 표현하기 위해 만들어진 View를 위한 Model입니다.


처리 순서

  1. 사용자의 입력이 View로 들어옵니다.
  2. View가 입력을 ViewModel에 전달합니다.
  3. ViewModel이 Model에 데이터를 요청합니다.
  4. Model이 데이터를 ViewModel에 넘겨줍니다.
  5. ViewModel은 받은 데이터를 가공해서 저장합니다.
  6. View는 ViewModel과의 Data Binding으로 자동으로 갱신됩니다.

처리 순서(카카오톡 비유)

  1. 사용자가 View에 채팅을 입력합니다.
  2. View가 채팅을 ViewModel에 전달합니다.
  3. ViewModel에 Model에 채팅 출력을 요청합니다.
  4. Model이 처리한 화면을 ViewModel에 넘겨줍니다.
  5. ViewModel은 받은 화면을 포맷에 맞게 가공한 뒤 저장합니다.
  6. View는 ViewModel과 Data Binding으로 자동으로 화면이 출력됩니다.

View와 ViewModel의 의존성이 낮아지게 되었지만, ViewModel의 구현이 힘들다는 단점이 있습니다.


MVC에서는 Controller에 전략 패턴, View에 컴포지트 패턴,
MVVM에서는 커맨드 패턴, Data Binding 패턴이 주요하게 사용되었습니다.

profile
Zero-Base to Solid-Base

0개의 댓글