Skip to content

Commit ac4ff9b

Browse files
committed
챕터 8 추가
1 parent f081052 commit ac4ff9b

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

챕터_8/변수미.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
## 8.1 MVC 패턴
2+
3+
MVC 패턴은 애플리케이션의 구조를 개선하기 위해 **관심사의 분리를 활용**하는 아키텍쳐 디자인 패턴입니다.
4+
5+
MVC : 비즈니스 데이터(모델)과 UI (뷰)를 분리하고, 세 번째 구성 요소(컨트롤러)가 로직과 사용자 입력을 관리하는 구조
6+
7+
### 8.1.1 Smalltalk-80의 MVC 패턴
8+
9+
1970년대에는 GUI라는 개념이 거의 존재하지 않아, 실제 세계의 아이디어를 모델링하는 **도메인 객체와** 사용자 의 화면에 렌더링되는 **프레젠테이션 객체 사이를 명확하게 구분하기 위한 수단**으로 **‘분리된 프레젠테이션(Separated Presentation)’** 이라는 개념이 유명해졌습니다.
10+
11+
Smalltalk-80에서 구현된 MVC는 이 ‘분리된 프레젠테이션’ 개념을 한 단계 더 발전시켜 애플리케이션의 로직과UI를 분리하는 것을 목표로 했습니다 -> 모델을 애플리케이션의 다른 인터페이스에서도 재사용할 수 있음
12+
13+
### 8.2.1 모델
14+
15+
- 애플리케이션의 데이터를 관리
16+
- 모델이 변경될 때 관찰자에게 변경사항을 알립니다.
17+
- 비즈니스 데이터와 주로 관련이 있다.
18+
19+
### 8.2.2 뷰
20+
21+
- 모델에 대한 시각적인 표현, 현재 상태의 특정 부분만 보여준다.
22+
- 뷰는 모델을 관찰하고, 모델에 변화가 생기면 알림을 받습니다.
23+
- 사용자와 상호작용
24+
25+
### 8.2.3 템플릿
26+
27+
> 뷰는 애플리케이션 데이터를 시각적으로 표현하고, 템플릿은 뷰를 생성하기 위 해 사용될 수 있다.
28+
29+
템플릿은 뷰와 연관되어있습니다.
30+
단, 템플릿 자체가 뷰는 아니라는 점을 명심해야 합니다. 뷰는 모델을 관찰하고 시각적 표현(UI) 을 최신 상태로 유지하는 객체입니다.
31+
프레임워크가 템플릿 명세에 따라 뷰를 생성할 수 있도록, 템플릿은 뷰 **객체의 일부 또는 전체를 선언적으로 지정하는 방법**이 될 수 있습니다.
32+
33+
### 8.2.4 컨트롤러
34+
35+
- 컨트롤러는 모델과 뷰 사이의 중재자 역할
36+
- 사용자가 뷰를 조작할 때 모델을 업데이트하는 역할
37+
- 애플리케이션 내에서 모델과 뷰 간의 로직 그 리고 연동을 관리
38+
39+
## 8.3 MVC를 사용하는 이유는?
40+
41+
MVC에서의 관심사 분리는 애플리케이션의 기능을 더 간단한 모듈로 나눌 수 있도록 해줍니다.
42+
43+
- 전반적인 유지보수의 단순화
44+
- 애플리케이션을 업데이트 할 때 변경사항이 데이터 중심, 시각적인 변경인지 명확하게 구분 가능
45+
- 모델과 뷰의 분리
46+
- 비즈니스 로직에 대한 단위 테스트가 간편해짐
47+
48+
## 8.6 MVP 패턴
49+
50+
> 프레젠테이션로직의 개선에 초점을 맞춘 MVC 디자인 패턴의 파생
51+
52+
### 8.6.1 모델, 뷰, 프리젠터
53+
54+
MVP에서 P 는 프리젠터 Presenter를 의미 <- 뷰에 대한 UI 비즈니스 로직을 담당하는 구성요소
55+
56+
MVC와달리,뷰에서의 이벤트호출은 프리젠터로 위임됩니다. (컨트롤러가 아닌 프리젠터로)
57+
프리젠터는 뷰와 분리되어 있으며, 인터페이스를 통해 뷰와 통신합니다.
58+
=> 단위 테스트에서 뷰를 모킹 할수있는 등의 많은 장점을 제공
59+
60+
일반적으로는
61+
뷰의 요청에 따라, 프리젠터는 사용자 요청과 관련된 작업을 수행하고 데이터를 뷰로 다시 전달합니다.
62+
이를 위해 프리젠터는 데이터를 가져오고, 조작하고, 이 데이터가 어떻게 뷰에 표시되어야 하는지 결정합니다.
63+
64+
### 8.6.2 MVP vs MVC
65+
66+
MVP
67+
68+
- 👍 프레젠테이션 로직을 최대한 재사용해야 하는 엔터프라이즈 수준의 애플리케이션
69+
- 👍 뷰가 매우 복잡하고 사용자와의 상호작용이 많은 애플리케이션
70+
- MVC에서 여러 컨트롤러에 의존해야할 수 있어 👎
71+
- MVP에서는 복잡한 로직을 프리젠터 안에 캡슐화 할 수 있음
72+
73+
> MVC와 MVP 간의 차이점이 대부분 의미론적인 수준이므로, MVC에 존재하는 근본적인 문제점들은 MVP에도 동일하게 존재할 가능성이 크다.
74+
75+
### 8.7.2 모델
76+
77+
다른 패턴과 마찬가지로, 애플리케이션이 사용할 도메인 관련 데이터나 정보를 제공
78+
단, 데이터 유효성 검사를 모델에서 수행하는 것을 허용합니다.
79+
80+
### 8.7.3 뷰
81+
82+
다른 패턴과 마찬가지로, 뷰는 애플리케이션에서 사용자가 상호작용하는 유일한 부분이고, 뷰 모델의 상태를 표현하는 상호작용이 가능한 UI
83+
84+
❗ 뷰는 상태를 관리할 책임이 없다는 것
85+
<- 뷰는 뷰모델과 정보 또는 상태를 항상 동기화된 상태로 유지하기 때문
86+
87+
### 8.7.4 뷰모델
88+
89+
데이터 변환기의 역할을 하는 특수한 컨트롤러
90+
모델의 정보를 뷰가 사용할 수 있는 형태로 변환하고, 뷰에서 발생한 명령 (사용자의 조작이나 이벤트)을 모델로 전달합니다.
91+
92+
> 뷰모델은 UI계층의 뒤에 위치, 뷰가 필요로 하는 데이터를(모델로부터 가져와) 제공하며, 데이터와 사용자의 동작 모두를 뷰가 참조하는 출처의 역할
93+
94+
## 8.8 장단점
95+
96+
- 👍 UI를구동하게 해주는 요소를 동시에 개발할 수 있도록 합니다.
97+
- 👍 뷰를 추상화함으로써 뷰의 뒤에 작성되는 비즈니스로직의 양을 줄입니다.
98+
- 👍 뷰모델은 UI 자동화나 상호작용에 대한 고려없이도 테스트가 가능합니다.
99+
100+
- 👎 단순한 UI의 경우, 과도한 구현이 될 수 있습니다.
101+
- 👎 대규모 애플리케이션에서는 필요한 일반화를 제공하기 위해 뷰모델을 미리 설계하는 것이 어려울 수 있습니다.
102+
- -> 적절하게 사용하기 어렵다

0 commit comments

Comments
 (0)