Taking baby-developer steps

[디자인패턴] MVC 패턴 - Model / View / Controller (feat. 디자인 패턴 공부를 시작하며) 본문

CS 지식/객체지향

[디자인패턴] MVC 패턴 - Model / View / Controller (feat. 디자인 패턴 공부를 시작하며)

Surin Lee 2023. 12. 13. 12:54

디자인 패턴 공부를 시작하며

이전에 refactoring guru로 디자인 패턴을 공부한 적이 있었다. 귀여운 그림들이 있고 설명이 자세해서 좋은 자료이지만, 사실 그때 나는 클래스와 객체를 동일한 것이라 생각하고 있었기에 디자인 패턴에 대한 근본적인 이해 조차 부족해 제대로 학습하지 못했던것 같다.

https://refactoring.guru/design-patterns

 

Design Patterns

Design Patterns Design patterns are typical solutions to common problems in software design. Each pattern is like a blueprint that you can customize to solve a particular design problem in your code. Catalog of patterns List of 22 classic design patterns,

refactoring.guru

책을 완전히 이해했다고는 하지 못하지만, "객체지향의 사실과 오해"책을 읽으며 디자인 패턴의 의미와 필요를 깨닫게 되었고, java와 스프링 부트 기술 스택을 학습하면서 스프링 부트가 MVC 패턴 기반으로 만들어져있다는 이야기를 많이 들었다. MVC 패턴이 Model / View / Controller의 약자라는것 정도 알고 있었지만, MVC 패턴이 정확히 무엇인지는 모르고 있었다. 이번 기회에 한번 알아보고 넘어가보자 싶어서 스프링 부트 공부 중에 MVC 패턴을 찾아보고 정리하는 포스트이다.

MVC 패턴

  GoF가 뭐지?

 디자인 패턴을 공부하려고 하면 보거나 듣게 되는 단어가 GoF(Gang of Four)이다. GoF의 디자인 패턴 ("Design Patterns: Elements of Reusable Object-Oriented Software")라는 책에서 처음으로 책으로 소프트웨어 공학에서 사용되는 패턴을 정리했는데 이 책을 GoF라고 줄여부른다. 이 책에서 23가지의 디자인 패턴들을 소개하는데 객체 생성, 구조, 행동 관련 설계 패턴들을 소개한다. 이 23가지 패턴은 대부분의 디자인 패턴 책에서도 소개하고 있고, 위 링크인 refactoring guru에도 친절하게 설명되어있다.

 

다만! MVC 패턴은 GoF 책에 포함되어 있지 않다. 따라서 MVC 패턴을 배우고 싶어서 디자인 패턴 강의나 책 구입을 고려한다면, 목차 및 커리큘럼에 MVC 패턴이 포함 되어있는지 확인해보는 것이 좋을 것이다. 

 

MVC 패턴이 필요할 때

 사용자 인터페이스가 필요하다 -> MVC 패턴 사용을 고려해 볼것

MVC 패턴의 특징

 백엔드와 프론트를 분리 시키고 이 사이의 조정이 존재한다.백엔드의 역할을 하는 Model, 프론트의 역할을 하는 View, View에게 요청을 받아 Model에게 요청을 전달하는 Controller 객체 혹은 객체 집합이 존재한다.Model : 사용자가 조작하고 싶어하는 data, state, logic이 존재한다.View : Model 정보를 사용자에게 보여주고, 사용자가 Model과 상호작용 할 수 있게 한다.Controller : 유저와 요소간 상호작용을 해석하고 모델을 수정한다. View와 Model의 느슨한 결합을 지원한다. View가 사용자 인터페이스에 집중할 수 있게 하는 역할을 한다.

 

일반적으로 Model을 관찰가능하게(obsevable) 만들어, 모델에 변경사항이 있을 때 view에게 알려 update 시킨다. view는 사용자가 원하는 변화를 Model에게 바로 요청하지않고, Controller에게 사용자의 상호작용 결과만 전달한다. 그러면 Controller는 상호작용을 해석하고 모델에게 요청을 보낸다. View가 Model에게 직접 요청을 보내지 않게되어 View의 툴킷등을 변경해도 Model은 영향을 받지 않고, 이는 Model과 View 간의 의존성이 줄어든것에 따른 결과이다.

디자인 패턴

 디자인 패턴은 유연하고 확장이 용이한 소프트웨어 설계도이다. 지난 2년, 정말 짧은 시간이지만 프로그래밍을 공부하고 프로젝트를 진행하며 가장 막막할 때는 프로그램 설계였다. "좋은 설계"는 내가 만들 프로그램의 고객이 누구인가, 어떤 기능을 해야하는 가, 어떤 자원이 중요한가 등에 따라 달라진다. "어디에나 쓸 수 있는 궁극적으로 좋은 설계 방법"는 존재하지 않는다. 어디에 집중해야하는지를 정하고 그에 맞게 설계하고 구현을 해야한다. 

 IT 분야 선배님들이 감사하게도 남겨준 유산이 디자인 패턴이다. 특정 문제에 대한 해결법을 줄 수 있는 "객체 설계"라고 생각하면 된다. 그렇기에 "디자인패턴을 구현하는 단 한가지 방법" 같은 것은 없다. 동일한 디자인패턴을 사용해도 프로젝트의 규모, 참여인원 등등에 따라 구현은 제각각으로 달라진다. 


참고문헌 : 쉽게배워 바로 써먹는 디자인 패턴 ,

coursera Design Patterns(University of Alberata) (https://www.coursera.org/lecture/design-patterns/2-3-1-mvc-pattern-hvINx)

Comments