프로그래밍 공부/Spring

디자인 패턴

알 수 없는 사용자 2020. 3. 2. 11:02

-디자인 패턴이 필요한 이유

 

모든 디자인 패턴들은 

화면에서 보여지는 로직과

실제 데이터들이 처리되는 로직을 분리한다.

 

그리해야

협업, 유지보수, 테스트에 용이하다.

 

 즉 쾌적하고 편리한 개발환경 구축가능하기 때문이다.

 


 

-디자인 패턴 종류

 

MVC, MVP, MVVM 모델등이 있다.

 


 

-MVC 모델

 

Model, View, Controller 로 이루어져있다.

 

 

Model

데이터, 데이터의 상태(State), 비지니스 로직이 들어가 있다.

 

View

Model를 표현한다. 

사용자가 입력한 값을 Controller에게 전달한다.

 

Controller

Model을 통해 사용자가 입력한 데이터들을 받는다.

처리된 데이터 값들을 View로 넘긴다.

Model과 View사이에서 행동한다.

 

 

-대략적인 작동방식

 

사용자의 Action들은 Controller에 들어온다.

Controller는 사용자의 Action를 확인하고, Model을 업데이트합니다.

Controller는 Model을 나타내줄 View를 선택합니다.

View는 Model을 이용하여 화면을 나타냅니다.

 

View는 Controller를 인식하지 못한다.

Controller는 View를 선택할 뿐, 직접 업데이트를 시키진 않는다.

Controller와 View는 1:N의 관계, 여러개의 View를 Controller가 선택한다.

 

 

-장점

 

단순하고 많이 쓰는 방식이다.

 

 

 

-단점

 

View와 Model이 서로 의존성있다. 유지보수에 어렵다.

너무 많은 것들이 Controller에 들어가게 된다.

 


 

-MVP 모델

 

Model, View, Presenter

Controller 대신에 Presenter가 등장했다.

 

 

Presenter 

View에서 요청한 정보를 Model로 부터 가공해서 View로 전달하는 부분

 

 

-대략적인 작동방식

 

View로 사용자의 입력이 들어온다

View에서 Presenter에 작업요청 (1:1)

Presenter에서 Model에게 데이터 요청

Model이 Presenter에게 데이터를 전달

Presenter는 View에게 데이터 응답

View가 데이터 받은걸로 화면에 출력

 

 

 

 

-장점

 

View와 Model 둘 사이의 의존성이 없어짐

 

 

-단점

 

대신 View와 Presenter가 강한 의존성을 가지게 됨

복잡할수록 더 강한 의존성을 가지게 된다.

비슷한 로직을 필요하는 화면이 많을수록 중복되는 코드들이 늘어난다.

 


 

 

-MVVM 모델

Model, View, ViewModel 로 이루어져있다.

 

 

ViewModel

 

View를 표현하기 위해 만든 

View를 위한

Model 이다.

View를 나타내기 위해 데이터를 처리한다. 

 

 

- 대략적인 작동방식

 

View를 통해 사용자의 Action이 들어온다

View가 Command 패턴으로 View Model에 Action을 전달

View Model이 Model에게 데이터를 요청하고 Model은 데이터를 ViewModel로 넘겨준다

ViewModel은 넘겨받은 데이터들을 가공해서 저장한다.

view는 ViewModel과의 Data Binding을 통해 자동으로 화면에 출력

 

 

View와 ViewModel 사이의 의존성이 없다.

ViewModel과 View는 1:N 관계

 

 

 

-장점

 

각각의 부분이 전부 독립적이기에 모듈화하여 개발 가능

 

 

-단점

Databinding이 필수

간단한 View 제작시 굉장히 비효율적임

ViewModel의 설계가 쉽지않다

 


 

- 결론

각자 알맞는 사용처가 있다.

 

 

 

참고한 사이트

https://beomy.tistory.com/43

불러오는 중입니다...

https://magi82.github.io/android-mvc-mvp-mvvm/

불러오는 중입니다...

https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/

불러오는 중입니다...

 

'프로그래밍 공부 > Spring' 카테고리의 다른 글

Spring Framework 개발 순서  (0) 2020.02.21