SPRING MVC 패턴과 옵저버 패턴

함궈·2022년 8월 13일

스프링

목록 보기
5/5

모델 뷰 컨트롤러 - mvc 패턴

모델

데이터를 가진 객체, 일반적으로 DTO, VO를 모델이라고 함

클라이언트나 서버에서 다루려는 정보를 모두 담을 수 있어야 함.

모델은 뷰나 컨트롤러의 정보를 저장하지 않음.

사용자에게 제공될 화면, UI, 예를 들면 html,css,javascript를 모아둔 것.

보여줄 모델의 정보를 받아와 화면에 보여주어야 하는데,

뷰도 모델과 컨트롤러의 정보를 저장하지 않음.

컨트롤러

모델과 뷰는 서로의 존재를 모르기 때문에, 둘 중 하나가 변경되는 경우 외부로 알려야 하는데, 컨트롤러는 그 중간 다리 역할을 하게 됨.

당연히 이 다리 역할을 하려면 모델과 뷰의 정보를 알고 있어야 한다.

  1. MVC 패턴에 옵저버 패턴이 적용되어 있는데, 무엇이 옵저버이고 무엇이 주제일까?

    정답

    주제 : Model 옵저버 : View

    컨트롤러에서 다리 역할을 하므로, 컨트롤러가 옵저버이고, 모델과 뷰가 주제라고 생각했지만,
    다리 역할을 한다고 해서 옵저버일 필요는 없으며, 뷰와 모델의 정보를 알고 있어야 한다고 옵저버일 필요도 없다.
    정말로 모델의 값을 필요로 하는 쪽은 뷰이며, 컨트롤러를 통해 모델의 정보를 가져오는 것일 뿐이다.

  1. Model 과 View로만 구성되어 있다고 가정하고, 옵저버 패턴을 왜 사용했을까?

    정답

    MVC 패턴은 Layered Style이며 하위 계층에서 상위 계층의 기능을 사용하는 것은 권장되지 않는다.
    그 이유로는,
    A계층에서 B계층의 기능을 사용 → A계층은 B계층에 종속된다. 즉, B가 없으면 A는 자신의 역할을 수행할 수 없게 된다.
    하위 계층이 상위 계층보다 생명 주기가 길며, 변경되는 일이 적어야 한다.
    MVC 패턴에서 Model이 View보다 하위 계층인데, 만약 Model이 View의 기능을 사용하려는 경우,
    Model이 View에 종속되는 것을 막을 수 없다. 이를 해결하기 위해 옵저버 패턴을 필요로 한다.

추가

또한 Model 과 View로만 구성되어 있는 경우, 높은 결합도를 가지게 된다.
높은 결합도를 가질 경우, 한 쪽을 수정할 때, 다른 한 쪽과 연관된 부분이 많아, 다른 한 쪽도 수정해야하는 경우가 생긴다.
Model과 View 사이에 Controller를 두면서, 낮은 결합도를 가지게 할 수도 있고,
Model에서 View의 기능이 필요한 경우,
옵저버 패턴도 적용하여 하위 계층인 Model이 상위 계층인 View에 종속되는 것을 막을 수 있다.
→ 중간에서 다리 역할을 하기 때문!


출처 :

Layered Architecture

Layered Architecture

응집도와 결합도

MVC 패턴과 옵저버 패턴

MVC 패턴과 옵저버 패턴

0개의 댓글