|
| 1 | +# 자바스크립트 MV* 패턴 |
| 2 | + |
| 3 | +## MVC 패턴 |
| 4 | + |
| 5 | +- 애플리케이션의 구조를 개선하기 위해 관심사의 분리를 활용하는 아키텍처 디자인 패턴 |
| 6 | + |
| 7 | +> 대충 장고나 RoR 같은 도구를 썻엇어 가지고 느낌으로만 알고 있음 |
| 8 | +> 근데 다 읽고 나서도 느낌적으로만 아는 느낌? |
| 9 | +
|
| 10 | +```js |
| 11 | +// 태그된 템플릿 리터럴 문법을 이제 앎 |
| 12 | + |
| 13 | +function taggedTemplateLiterals(...arg) { |
| 14 | + console.log('arg is: ',arg); |
| 15 | + const [str, ...values] = arg; |
| 16 | + console.log('str is: ',str); |
| 17 | + console.log('values is: ',values); |
| 18 | +} |
| 19 | + |
| 20 | +taggedTemplateLiterals`Hello ${'world'}!`; |
| 21 | + |
| 22 | +// arg is: [ [ 'Hello ', '!' ], 'world' ] |
| 23 | +// str is: [ 'Hello ', '!' ] |
| 24 | +// values is: [ 'world' ] |
| 25 | +``` |
| 26 | + |
| 27 | +## MVP |
| 28 | + |
| 29 | +- MVC 패턴의 변형 |
| 30 | +> 이라지만 다른 점을 잘 모르겠음, 알고 싶지도 않은 느낌? |
| 31 | +> 초면이라 그런가 |
| 32 | +
|
| 33 | +## MVVM |
| 34 | + |
| 35 | +- MVC와 MVP를 기반으로 하는 아키텍처 패턴 |
| 36 | +- 애플리케이션의 UI 개발 부분과 비즈니스 로직, 동작을 명확하게 분리 |
| 37 | + |
| 38 | +- 다른 것들과 달리 뷰가 능동적 |
| 39 | + - 데이터 바인딩, 이벤트, 동작들을 포함하고 있어 뷰모델에 대한 이해를 필요로 하기 때문 |
| 40 | + - 상태를 관리할 책임이 없음. 뷰는 뷰모델과 정보 또는 상태를 항상 동기화된 상태로 유지함 |
| 41 | + |
| 42 | +- 뷰모델 |
| 43 | + - 모델과 뷰모델의 속성은 양방향 데이터 바인딩을 통해 동기화되고 업데이트됨 |
| 44 | + |
| 45 | +- MVC와는 다르게 전체 모델을 뷰에 노출하지 않음 |
| 46 | + - 이는 애플리케이션의 복잡도에 따라 보안 및 성능에 문제를 일으킬 수 있음 |
| 47 | + |
| 48 | +## 최신 |
| 49 | + |
| 50 | +- Vue.js는 공식적으로 뷰모델을 사용하는 MVVM 패턴이라고 주장함 |
| 51 | +- 리액트는 이 패턴들로 볼 수 없음 |
| 52 | + |
| 53 | +## 마치며 |
| 54 | + |
| 55 | +- 개별 컴포넌트를 구성할 때 뷰모델이나 모델의 개념을 적용해 컴포넌트의 뷰를 구성하는 데에 도움이 될 수 있음 |
0 commit comments