-
Notifications
You must be signed in to change notification settings - Fork 20
Description
안녕하세요 🙂 이번에 복합 패턴에 나오는 MVC 패턴에서 토론하면 좋을 것 같은 내용이 있어 공유합니다.
첫번째 논의 사항: 'View에서 controller 객체를 구성해도 되는가?'
책에서는 아래 그림 처럼 View가 사용자와의 상호작용을 책임지고, 이에 따라 사용자의 입력을 Controller에게 전달해야할 필요가 생겨 의존 관계가 생기는 것을 알 수 있었습니다.

그렇게 되면 View 객체에 화면을 나타내는 책임 뿐만 아니라, 그 흐름에 맞추어 Controller의 메소드를 적시에 호출하여야하는 책임이 생겨 2가지 책임을 갖게 되고 이는 단일 책임 원칙을 위배한 것이라고 생각했습니다.
그래서 위 그림과 같이 사용자의 요청이 controller로 들어오게 되면 View는 화면을 나타내는 책임만 가질 수 있고, controller는 애초에 책임이 사용자 입력에 따른 해석 및 Model 메소드 호출이므로 controller에 따로 책임을 추가하지 않겠다고 생각했습니다.
또한, View에서 controller 객체를 구성하고 있지 않아도 되기 때문에 훨씬 유연한 구조가 될 것이라 생각했습니다.
두번째 논의 사항: 'View에서 model 객체를 구성해도 되는가?'
책의 예제에서는 View에서 model 객체를 구성하여 model 객체에 데이터 변화가 있을 때, notify 받는 형식의 옵저버 패턴을 사용하였습니다.
제가 생각하는 예상되는 문제는 다음과 같습니다.
- data push 방식이 아니라 pull 방식이기 때문에 멀티스레드 환경에서 문제가 생길 수 있다.
- model의 getter 메소드를 다른 메소드에서도 부를 수 있게 되어 모델을 사용한 후에도 모델의 정보를 알 수 있다.
- model과 의존성이 생긴다.
위와 같은 문제를 해결하기 위하여 찾아본 결과 우선, 지난번에 논의한대로 push 방법을 사용하는 방법도 있고, model과의 의존관계를 아예 지우고 controller가 model로부터 데이터를 받아와 무조건 view를 변경하는 방법도 있었습니다.
결론적으로 저는 단일 책임 원칙과 의존 관계를 생각했을 때 Controller가 사용자의 입력을 처리하고, model과의 의존관계를 아예 지우고 controller가 model로부터 데이터를 받아와 무조건 view를 변경하는 방법이 가장 좋다고 판단했습니다.
혹시 위와 같은 문제에 대해서 어떻게 생각하는지 다르게 생각하시는 부분이 있으신지 공유 부탁드립니다. 감사합니다 🧐
