본문 바로가기
목차훔치기/면접을 위한 CS 전공지식 노트

MVC 패턴(면접을 위한 CS 전공지식 노트)

by 해삼2 2023. 8. 14.
728x90
반응형
MVC 패턴

MVC패턴

MVC 패턴(MVC Pattern)은 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나로, 
소프트웨어의 구조를 세 가지 주요 컴포넌트로 분리하여 애플리케이션의 개발과 유지보수를 더욱 
효율적으로 만드는데 목적이 있습니다. 
MVC는 Model-View-Controller의 약자로, 각각의 컴포넌트는 특정 역할을 수행하며 서로 상호작용합니다.

 

MVC 패턴의 세 가지 주요 컴포넌트

Model (모델):
애플리케이션의 데이터와 비즈니스 로직을 담당합니다.
데이터의 저장, 검색, 수정, 삭제 등의 작업을 처리하며, 데이터의 변화를 추적합니다.
모델은 UI나 사용자 인터페이스와 독립적으로 동작하며 데이터 관리에만 집중합니다.

 

View (뷰):
사용자에게 데이터를 시각적으로 표현하고 표시하는 역할을 합니다.
모델의 데이터를 가져와 사용자 인터페이스를 통해 표시하며, 사용자의 입력을 모델에 전달하지 않습니다.
뷰는 데이터 표현과 관련된 로직을 포함하지 않아야 합니다.

 

Controller (컨트롤러):
사용자 입력을 받아 처리하고 모델의 업데이트를 관리합니다.
사용자의 요청에 따라 적절한 모델의 동작을 호출하고, 이에 대한 결과를 뷰에 전달합니다.
컨트롤러는 모델과 뷰 사이의 중개자 역할을 수행하여 분리된 상호작용을 조정합니다.

 

MVC패턴 장점

분리된 역할: 

각 컴포넌트가 역할에 맞게 분리되어 있기 때문에 코드의 유지보수와 개발이 더 쉬워집니다. 

개별 컴포넌트의 수정이 다른 컴포넌트에 큰 영향을 미치지 않습니다.

재사용성: 

모델과 뷰를 독립적으로 개발할 수 있어 재사용성이 향상됩니다. 

예를 들어, 새로운 뷰를 추가하거나 모델을 다른 애플리케이션에서도 활용할 수 있습니다.

유연성: 

모델이 변경되더라도 뷰와 컨트롤러는 수정할 필요 없이 모델을 업데이트할 수 있습니다. 

이로 인해 애플리케이션의 변화에 대응하기 더 쉬워집니다.

테스트 용이성: 

각 컴포넌트는 독립적으로 테스트할 수 있어 테스트 용이성이 높아집니다. 

특히 모델과 컨트롤러의 비즈니스 로직을 테스트하기 용이합니다.

 

 

MVC패턴 단점

복잡성 증가: 

MVC 패턴은 세 가지 컴포넌트를 관리해야 하므로 초기 설계 및 구현이 복잡해질 수 있습니다.

패턴의 오용: 

가벼운 애플리케이션에 MVC 패턴을 강제로 적용하는 경우, 오히려 코드량이 늘어나고 복잡도가 

증가할 수 있습니다.

더 많은 파일과 클래스: 

MVC 패턴은 각 컴포넌트를 별도의 클래스로 분리하기 때문에 프로젝트에 더 많은 파일과 클래스가 

생길 수 있습니다.

오버헤드: 

작은 규모의 애플리케이션에서는 컴포넌트 간의 통신과정이 오버헤드를 초래할 수 있습니다.

학습 곡선:

 MVC 패턴을 처음 사용하는 개발자에게는 학습 곡선이 있을 수 있습니다. 

세 가지 컴포넌트의 상호작용 및 역할을 익히는 시간이 필요할 수 있습니다.

MVC 패턴은 애플리케이션의 규모와 복잡도, 개발자의 팀 구성 등을 고려하여 적절하게 적용해야 합니다. 

중대한 결정을 내려야 할 때 장단점을 고려하고 적절한 패턴을 선택하는 것이 중요합니다.

 

MVC패턴 자세히 알기!

해성이라는 학생이 할 일 관리 애플리케이션을 사용하는 상황을 가정하여 MVC 패턴을 설명해 보겠습니다.

 

Model (모델):
할 일 목록을 관리하는 역할을 수행합니다.
해성이의 할일 항목 추가, 수정, 삭제 등의 작업을 처리하며, 변경된 데이터를 저장합니다.
예를 들어, 해성이가 "과학 과제 제출"이라는 할 일을 추가하면 모델은 이 정보를 저장하고 관리합니다.

 

View (뷰):
해성이에게 할일 목록을 시각적으로 표시하는 역할을 합니다.
할일 항목들의 리스트를 화면에 나열하고, 해성이가 체크박스를 통해 완료 여부를 표시하거나 

삭제 버튼을 누를 수 있도록 합니다.
예를 들어, 해성이가 할일 목록을 열면 뷰는 모델로부터 할일 항목들의 정보를 받아와 화면에 나열합니다.

 

Controller (컨트롤러):
해성이의 입력을 처리하고 모델의 업데이트를 관리합니다.
해성이가 할일 항목을 추가하거나 완료 여부를 변경하거나 삭제하려고 할 때, 뷰가 입력을 받아 

컨트롤러에게 요청을 전달합니다.
컨트롤러는 이 요청을 받아 모델을 업데이트하고, 모델의 변화를 뷰에 반영하여 화면을 갱신합니다.

 

예제 상황:
해성이가 학교에 와서 애플리케이션을 열어 할 일 목록을 확인할 때,
뷰는 모델로부터 할일 목록 데이터를 요청하고, 받아온 데이터를 화면에 표시합니다.
해성이가 "과학 과제 제출"을 추가하려고 할 때,
뷰는 해성이의 입력을 받아 컨트롤러에게 요청을 전달합니다.
컨트롤러는 모델을 업데이트하여 "과학 과제 제출"을 추가하고, 뷰에게 업데이트된 데이터를 전달하여 

화면을 갱신합니다.
해성이가 "수학 숙제 완료"를 완료 표시하려고 할 때,
뷰는 해성이의 입력을 받아 컨트롤러에게 요청을 전달합니다.
컨트롤러는 모델을 업데이트하여 해당 할 일 항목의 완료 상태를 변경하고, 뷰에게 업데이트된 

데이터를 전달하여 화면을 갱신합니다.
이렇게 해성이의 학교 생활에서 할일 관리 애플리케이션을 사용하는 상황에서도 모델, 뷰, 컨트롤러의 

역할과 상호작용이 분리되어 있으며, 

이를 통해 애플리케이션의 구조와 유지보수가 효율적으로 이루어질 수 있습니다.

 

 

*바쁜 사람을 위한 깜찍한 정리

정리했는데 이거 맞아? MVC패턴이란 Model-View-Controller의 약자로, 각각의 컴포넌트는 특정 역할을 수행하며 서로 상호작용합니다. 모델은 사용자가 저장, 검색, 수정, 삭제등과 같은 작업을 처리해 주는 역할이며 데이터의 변화를 추적해 주는 역할을 하고 뷰는 사용자에게 시각적으로 데이터를 표현해 주는 역할 즉 인터페이스이며 컨트롤러는 뷰와 모델을 이어주는 역할 서로 상호작용 할 수 있게 만드는 역할을 하는 게 컨트롤러입니다. 예시로는 슈퍼마켓에서 직원이 물건이 들어와서 보관하는 거를 처리하는 작업을 모델이라 하며 손님은 그 물건을 시각적으로 보는 것을 뷰로 하고 그 물건을 손님이 가져갈 때 일어나는 역할들을 컨트롤러가 뷰에서 모델에게 전달해 해당 물건의 재고를 파악하고 다시 채워 넣는 작업을 의미합니다.
728x90
반응형