Skip to content

Commit b4d5fb9

Browse files
Docs :220225/김민성/MVC_MVVM 이론 정리
1 parent 4de0e1f commit b4d5fb9

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

CS/SoftwareEngineering/MVC_MVVM.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
# MVC, MVVM 패턴
2+
3+
> MVC
4+
5+
> MVVM
6+
7+
<br>
8+
디자인 패턴이란 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만든 것을 말합니다.
9+
10+
<br>
11+
12+
# MVC
13+
> Model-View-Controller
14+
15+
어플리케이션을 세 개의 영역으로 분할하고 각 구성 요소에게 고유한 역할을 부여하는 개발 방식입니다.
16+
MVC 패턴을 도입하면 도메인(비즈니스 로직) 영역과 UI 영역이 분리되므로 서로 영향을 주지 않고 유지보수가 가능합니다.
17+
18+
![IMAGES](img/MVC_MVVM/1.png)
19+
20+
## Model
21+
프로그램에 사용되는 데이터를 의미하며 데이터베이스(DB), 상수, 문자열과 같은 변수들, 비전 프로그램이라면 카메라 정보와 같은 것들이 해당됩니다. 모델에는 뷰나 컨트롤러의 정보가 전혀 없습니다. 단지, 정보만 반환하거나 설정할 수 있습니다.
22+
23+
## View
24+
텍스트박스, 라벨, 버튼 등 사용자 인터페이스(User interface) 요소들을 의미합니다. 사용자가 제어하고 데이터를 확인할 수 있는 영역입니다. 뷰에서는 별도의 데이터를 보관하지 않습니다. 뷰에서 입력받고 출력해주는 모든 데이터는 모델을 사용해야합니다.
25+
26+
## Controller
27+
모델과 뷰를 관장하는 브릿지(Bridge)역할을 수행합니다. 사용자가 버튼을 클릭하면 이벤트는 뷰에서 발생하지만 내부 처리는 컨트롤러에서 관리하는 것입니다. 또한, 입력이 발생하면 이에 대한 통지를 담당합니다.
28+
29+
![IMAGES](img/MVC_MVVM/2.png)
30+
31+
model 1은 컨트롤러와 뷰를 같이 구현하는 방식입니다.
32+
빠르고 쉬운 개발이 가능하지만, 컨트롤러와 뷰의 코드가 섞여있어 유지보수가 어렵다는 단점이 있습니다.
33+
34+
model 2는 유지보수가 어렵고, 코드를 알아보기 힘들다는 model 1의 단점을 보완하기 위해 컨트롤러와 뷰를 분리해서 구현하는 방식이다. 작업 시간은 model 1보다 길어지지만, 추후에 프로그램이 커지고 유지보수가 필요할 때는 model 2 방식이 더 유리합니다.
35+
36+
37+
<br>
38+
39+
- Process
40+
41+
1. Controller로 사용자의 입력이 들어온다.
42+
43+
2. Controller는 Model의 데이터를 업데이트 및 읽어온다.
44+
45+
3. Model은 해당 데이터를 보여줄 View를 선택해서 화면에 보여준다.
46+
47+
<br>
48+
49+
## MVC 패턴을 사용하는 이유
50+
> 짧게 말하면 __효율적인 개발 및 유지보수를 위해서__ 라고 할 수 있습니다.
51+
52+
사용자가 보는 View, Model, 이를 제어하는 Controller로 각각 분리하여 프로그램을 개발하면, 중복개발되는 부분을 방지할 수 있어 개발시 효율성이 증대될 뿐 만 아니라, 추후 프로그램의 유연한 확장성을 가질 수 있으며, 어떠한 부분에서 문제가 발생하더라도 다른 부분에 최소한의 영향을 주며 변경할 수 있습니다.
53+
54+
<br>
55+
56+
## 단점
57+
Controller가 Model과 View에 대한 모든 처리를 담당하고 있기 때문에 어느선까지는 효율적인 관리가 가능하지만 프로그램이 복잡하고 무거운 대규모 프로젝트에서는 Controller에서 업무가 과중될 수 있습니다.
58+
59+
개발과 유지 보수가 용이하도록 설계한 모델이지만 일정 수준이상의 복잡한 프로젝트에서는 수정시 테스트가 힘들고 하나의 수정이 다른 부분에 영향을 미치는 등 역효과가 날 수 있습니다.
60+
61+
62+
## 한계
63+
모델과 뷰를 완전히 분리하기가 어렵다는 점이다. 이는 코드가 복잡해지고, 설계시간이 길어지는 원인이 됩니다. -> MVVM, MVP 등의 등장
64+
65+
66+
<br>
67+
68+
# MVVM
69+
> Model-View-ViewModel
70+
71+
![IMAGES](img/MVC_MVVM/3.png)
72+
73+
## Model
74+
앞서 말한 MVC 모델과 역할이 같습니다.
75+
76+
## View
77+
클라이언트에서 발생하는 이벤트, 액션은 View가 직접 처리합니다. 액션에 따라 ViewModel에 데이터 업데이트를 요청합니다. DataBinding으로 ViewModel의 변경사항을 반영합니다.
78+
79+
## ViewModel
80+
View만을 위해 정제된, 가공된 데이터를 제공하는 Model입니다. 외부에서 데이터 업데이트 명령을 받으면 데이터를 가공, 처리하여 Model로부터 새로운 데이터를 얻어옵니다. 얻어온 데이터를 다시 가공하여 가지고 있습니다.
81+
82+
<br>
83+
84+
- Process
85+
86+
1. View에 입력이 들어오면 Command 패턴으로 ViewModel에 명령함.
87+
88+
2. ViewModel은 Model에 필요한 데이터 요청.
89+
90+
3. Model은 ViewModel에 필요한 데이터 응답.
91+
92+
4. ViewModel은 응답받은 데이터를 가공해서 저장.
93+
94+
5. View는 ViewModel과 Data Binding으로 인해 자동으로 갱신.
95+
96+
<br>
97+
98+
MVVM 모델의 핵심은 DataBinding입니다. 기존의 MVC와는 다르게 View가 직접 ViewModel로부터 DataBinding을 통해 데이터를 가져옵니다.
99+
100+
- DataBinding: 데이터가 변경되었을 때 View에 메서드로 수정된 데이터를 반영하는 것이 아니라 데이터만 변경해도 자동으로 View에 반영이 될 수 있도록 해 주는 것.
101+
102+
<br>
103+
104+
## 장점
105+
Model에 의존성이 없는 View, View와 비즈니스 로직의 철저한 분리.
106+
107+
테스트가 수월해진다. (의존성이 없기 때문)
108+
109+
뷰와 뷰모델이 1:n 관계이기 때문에 중복되는 로직을 모듈화 해서 여러 뷰에 적용할 수 있다. (코드 재사용 가능)
110+
111+
112+
## 단점
113+
114+
설계하기가 복잡하다. (데이터 바인딩에 대한 지식 필요)
115+
116+
뷰모델이 비대해질 수 있다.
117+
118+
데이터 바인딩으로 인한 메모리 소모가 심하다.
119+
120+
<br>
121+
122+
### 📚 참고
123+
124+
[MVC 1](https://junhyunny.github.io/information/design-pattern/mvc-pattern/)
125+
126+
[MVC 2](https://myprivatestudy.tistory.com/41)
127+
128+
[MVC/MVVM 1](https://velog.io/@addiescode/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-MVC-MVVM)
129+
130+
[MVC/MVVM 2](https://colinch4.github.io/2020-12-03/interview-4/)
131+
<br>
132+
133+
134+
***
135+
136+
## Summary
137+
138+
***
139+
140+
<br>
141+
142+
# ⁉️ 면접 예상 질문
143+
144+
> 1. MVC 디자인 패턴에 대해 알고 있나요?
145+
146+
> 2. MVC 패턴을 사용할 때 문제점은 없나요?
147+
148+
> 3. MVC 패턴의 문제점을 어떤식으로 개선할 수 있나요?
149+
150+
151+
152+
153+
154+
155+
156+
157+
158+
159+

0 commit comments

Comments
 (0)