메이쁘

[SW CS] MVC 패턴에 대해서(Feat. 디자인 패턴이란??) 본문

면접 대비 CS지식/else

[SW CS] MVC 패턴에 대해서(Feat. 디자인 패턴이란??)

메이쁘 2020. 2. 28. 23:22

선배가 질문했는데 속 시원하게 대답해주지 못하고

알긴 아는데 제대로 이해시켜주지 못했습니다...

퇴근하고 집에와서 포스팅하면서

공부해야겠다 다짐했고,

지금 공부 및 정리를 포스팅을 통해 해보려고 합니다.

 

 

 

MVC, MVVM 패턴은 모두 디자인 패턴 종류 중 하나입니다.

 

그럼 디자인 패턴이 무엇일까요?

 

 

디자인 패턴(Design Pattern) 이란?


 디자인 패턴은 소프트웨어/프로그램을 개발하는 많은 프로그래머들이 인정한 효율적인 코딩 구조/방법 을 뜻합니다.

 

말이 너무 길어졌는데, 정리하자면 여러 SW에서 설계적 관점으로 좀 더 쉽고 편리하게 개발하는 방법(패턴) 입니다.

 

 

 

그럼, 효율적인 또는 쉽고 편리한 코딩의 기준은 무엇일까요?

 

 - 코드가 명확하고 단순하다. (가독성)

 - 재사용성이 높다.

 - 객체 간 응집도는 높이고, 결합도는 낮게 한다.

 - 유지보수가 쉽다.

 - 모듈(Class나 함수)은 최소화한다.

 

 

등 여러 가지 기준이 있습니다.

 

 

디자인 패턴은 수많은 종류가 있습니다.

 

이를 다 외우는 것이 아니라, 실제 프로젝트나 개발을 진행해보면서 익혀가고,

 

후에 적재적소에 맞게 디자인 패턴을 적용시키는 능력을 키워나가는 것이 중요하다고 생각합니다.

 

 

 

이 글에서는 안드로이드를 개발함에 있어

 

대표적인 MVC, MVVM 패턴 두 가지를 설명드리겠습니다.

 

 

MVC 패턴


 MVC는 각각 Model, View, Controller를 나타냅니다.

 

 - Model : 비즈니스 로직 및 데이터를 저장하고 관리합니다.

 - View : UI 모듈로서 화면 처리에 대한 부분을 담당합니다.

 - Controller : 요청을 분석하며 로직에 맞게 처리하고, 그 결과에 따라 View를 연결합니다.

 

 안드로이드 프로젝트의 코드들을 저 세 개의 역할로 구분하는 패턴입니다.

 

그림 1 : MVC 패턴 진행방식

 위 그림을 보면, 클라이언트(디바이스)에서 사용자는 화면을 보고 EditText에 입력하거나 버튼을 누릅니다. 

 

이를 디바이스에서 인식하고 그에 따른 결과를 사용자에게 보여주기 위해 서버에 데이터를 요청합니다.

 -> 사용자는 Controller에게 요청

 

 

 Controller에서 사용자에게 받은 데이터를 처리하기 위해 로직을 수행합니다.

이 때, 필요한 데이터들을 Model에서 공급받아 해결합니다.

변경된 데이터들은 다시 Model에 전송하여 갱신이 필요한 데이터들을 갱신합니다.

 -> Controller는 Model과 데이터 주고받음

 

 

 결과를 도출했으면, 이러한 결과를 사용자에게 다시 알려줘야 합니다.

 -> Controller는 View에게 결과를 전달함. (화면에 결과를 보여주기 위해 View 부분에 결과 전달)

 

 

 사용자에게 알려주기 위해 화면을 갱신합니다.

 -> View는 화면(UI) 변경을 통해 사용자에게 결과를 보여줍니다.

 

 

MVC 패턴은 위와 같은 과정으로 진행하도록 개발하는 디자인 패턴입니다.

 

MVC 패턴의 장단점


물론 이러한 디자인 패턴도 장점과 단점이 존재합니다.

 

 

장점

 

 - 유연하고 확장하기 쉬움.

 - 디자이너와 개발자의 협업이 용이함.

 - 유지보수의 비용을 절감할 수 있음.

 

 

 

단점

 

 - 이러한 패턴을 사용하기 위해 클래스, 기능들이 많이 필요하다. => 복잡한 설계

 - 설계가 복잡해지면서 시간이 오래 걸리고 숙련된 개발자들이 필요하다.

 - Model과 View의 완벽한 분리가 어렵다. => Model과 View의 의존성이 높아 패턴이 모호해지고 변형이 올 수 있다.

 

 

특히, Model과 View의 의존성이 높다는 단점은 생각보다 큽니다.

 

의존성이 높아지므로 각각이 독립적이지가 않아, 코드 하나를 수정하기 위해 여러 부분을 수정해야 할 수 있습니다.

 

이 것은 개발할 때에는 크게 느껴지지 않습니다만

개발 후에 테스트 또는 유지보수 할 일이 생기게 되면 엄청나게 느껴질 것입니다...

 

 

 

 

다음 포스팅은 MVVM 패턴 입니다!!

 

감사합니다.

 

 

 

 

 

 

 

참고
그림 1 : 한국데이터산업진흥원

참고 자료
https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=54&dbnum=168960&mode=detail&type=techreport

Comments