이번 포스트를 통해 디자인패턴의 종류에 대해 확실하게 알고 넘어가야겠다는 생각으로 작성을 하게 됐다.
디자인패턴의 종류
각 패턴들의 구조와 동작, 장점 및 단점은 다음과 같다.
MVC
1) 구조
- Model : 프로그램에서 사용되는 데이터와 그 데이터를 처리하는 부분
- View : 사용자에게 보여지는 UI 부분
- Controller : 사용자의 입력(action)을 받고 처리하는 부분
2) 동작
MVC 패턴의 동작 순서는 아래와 같습니다.
- 사용자의 Action들은 Controller에 들어오게 됩니다.
- Controller는 사용자의 Action를 확인하고, Model을 업데이트합니다.
- Controller는 Model을 나타내줄 View를 선택합니다.
- View는 Model을 이용하여 화면을 나타냅니다.
MVC에서 View가 업데이트 되는 방법
- View가 Model을 이용하여 직접 업데이트 하는 방법
- Model에서 View에게 Notify 하여 업데이트 하는 방법
- View가 Polling으로 주기적으로 Model의 변경을 감지하여 업데이트 하는 방법
3) 장점
구현하기 가장 쉽고 단순함
개발기간이 짧음
4) 단점
Model과 View사이의 의존성이 높음
의존성이 높아 프로그램이 커질수록 복잡하고 유지보수가 어려움
MVVM
1) 구조
- Model : 프로그램에서 사용되는 데이터와 그 데이터를 처리하는 부분
- View : 사용자에게 보여지는 UI 부분
- View Model : View를 표현하기 위해 만든 View를 위한 Model. View를 나타내 주기 위한 Model 이자 View를 나타내기 위한 데이터를 처리하는 부분
2) 동작
MVVM 패턴의 동작 순서는 아래와 같습니다.
- 사용자의 Action들은 View를 통해 들어오게 됩니다.
- View에 Action이 들어오면, Command 패턴으로 View Model에 Action을 전달합니다.
- View Model은 Model에게 데이터를 요청합니다.
- Model은 View Model에게 요청받은 데이터를 응답합니다.
- View Model은 응답 받은 데이터를 가공하여 저장합니다.
- View는 View Model과 Data Binding하여 화면을 나타냅니다.
3) 특징
MVVM 패턴은 Command 패턴과 Data Binding 두 가지 패턴을 사용하여 구현되었습니다.
Command 패턴과 Data Binding을 이용하여 View와 View Model 사이의 의존성을 없앴습니다.
View Model과 View는 1:n 관계입니다.
4) 장점
MVVM 패턴은 MVC와 달리 View와 Model 사이의 의존성이 없습니다. Command 패턴과 Data Binding을 사용하여 View와 View Model 사이의 의존성 또한 없앤 디자인패턴입니다. 각각의 부분은 독립적이기 때문에 모듈화 하여 개발할 수 있습니다.
5) 단점
ViewModel의 설계가 어렵다는 점입니다.
MVP
1) 구조
- Model : 프로그램에서 사용되는 데이터와 그 데이터를 처리하는 부분
- View : 사용자에게 보여지는 UI 부분
- Presenter : Model과 View 사이의 매개체. View에서 요청한 정보로 Model을 가공하여 - View에게 전달해주는 부분.
2) 동작
MVP 패턴의 동작 순서는 아래와 같습니다.
- 사용자의 Action들은 View를 통해 들어오게 됩니다.
- View는 데이터를 Presenter에 요청합니다.
- Presenter는 Model에게 데이터를 요청합니다.
- Model은 Presenter에서 요청받은 데이터를 응답합니다.
- Presenter는 View에게 데이터를 응답합니다.
- View는 Presenter가 응답한 데이터를 이용하여 화면을 나타냅니다.
3) 특징
Presenter는 View와 Model의 인스턴스를 가지고 있어 둘을 연결하는 접착제 역할을 합니다.
Presenter와 View는 1:1 관계입니다.
4) 장점
MVC와는 달리 코드가 매우 깔끔해지며,Presenter를 통해서만 데이터를 전달 받기 때문에 Model과 View 간의 결합도를 낮춰 새로운 기능 추가 및 변경을 해야 할 때 관련된 해당 부분만 코드를 수정하면 되므로 확장성이 좋아진다.
5) 단점
View와 Model 의존성을 해결됐지만, View와 Presenter 사이의 의존성이 높은 단점이 있다.
프로그램이 커질수록 View와 Presenter 사이의 의존성이 강해짐.