์์ฆ ๊ฐ๋ฐ์ ์ฑ์ฉ๊ณต๊ณ ์ฐ๋์ฌํญ์ ๋ณด๋ฉด, 'MVC, MVVM์ ๋ํ ์ดํด'๋ฅผ ์๊ตฌํ๊ณ ๋ ํ๋ค.
๊ทธ๋ผ ์ด๋กํด? ๊ณต๋ถํด์ผ์ง~!!
MVC, MVVM ์ํคํ ์ฒ๋?
์ํํธ์จ์ด ์ํคํ ์ฒ๋ ์ฝ๋๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์กฐํํ๋ ๋ฐฉ์์ด๋ค.
MVC(Model-View-Controller)์ MVVM(Model-View-ViewModel)์,
ํ๋ก ํธ์๋์์ UI์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํ ๊ตฌ์กฐ.
1. MVC (Model-View-Controller)
• Model (๋ชจ๋ธ): ๋ฐ์ดํฐ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง (์: API, DB ๋ฐ์ดํฐ)
• View (๋ทฐ): ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI (์: HTML, ํ๋ฉด)
• Controller (์ปจํธ๋กค๋ฌ): Model๊ณผ View๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ๋ฆ์ ์ ์ด (์: ์ด๋ฒคํธ ์ฒ๋ฆฌ)
โ ํน์ง:
• ํ๋ก ํธ์๋๋ณด๋ค๋ ๋ฐฑ์๋(Spring, Django ๋ฑ)์์ ๋ง์ด ์ฌ์ฉ
• ์ปจํธ๋กค๋ฌ๊ฐ ์ค์ฌ์ด ๋์ด Model๊ณผ View๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ
class Model {
constructor() {
this.data = "Hello, MVC!";
}
}
class View {
render(data) {
console.log("View: ", data);
}
}
class Controller {
constructor(model, view) {
this.model = model;
this.view = view;
}
updateView() {
this.view.render(this.model.data);
}
}
const model = new Model();
const view = new View();
const controller = new Controller(model, view);
controller.updateView();
2. MVVM (Model-View-ViewModel)
• Model (๋ชจ๋ธ): ๋ฐ์ดํฐ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง
• View (๋ทฐ): ์ฌ์ฉ์ UI (HTML, ํ๋ฉด)
• ViewModel (๋ทฐ๋ชจ๋ธ): View์ Model ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ ๋ฐ ๊ด๋ฆฌ (React์ ์ํ๊ด๋ฆฌ ์ญํ )
โ ํน์ง:
• React, Vue.js ๊ฐ์ ํ๋ ์์ํฌ์์ ๋ง์ด ์ฌ์ฉ
• ViewModel์ด ์ํ ๊ด๋ฆฌ ๋ฐ UI ์ ๋ฐ์ดํธ๋ฅผ ๋ด๋น → ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ์ฌ์
import { useState } from "react";
function ViewModel() {
const [message, setMessage] = useState("Hello, MVVM!");
return (
<div>
<p>{message}</p>
<button onClick={() => setMessage("MVVM ๊ตฌ์กฐ ์
๋ฐ์ดํธ!")}>ํด๋ฆญ</button>
</div>
);
}
๋ญ๊ฐ ๋ณต์กํ๊ณ ์ด๋ ต๋ค.. ๋น์ ๋ฅผ ํตํด์ ๋ ์ฝ๊ฒ ์ดํดํด๋ณด์.
๐ ํผ์๊ฐ๊ฒ๋ก ๋น์ ํ๋ฉด?
1. MVC (Model-View-Controller)
โก๏ธ ์ฃผ๋ฌธ์ ๋ฐ๋ ์ง์(Controller)์ด ์ฃผ๋ฐฉ(Model)๊ณผ ์๋(View) ์ฌ์ด๋ฅผ ์กฐ์จํจ
๐ ํน์ง
- ์๋(View)์ ์ง์ ์ฃผ๋ฐฉ(Model)๊ณผ ์ํตํ ์ ์์
- ์ง์(Controller)์ด ๋ชจ๋ ์์ฒญ์ ๊ด๋ฆฌํ๊ณ ์กฐ์จํด์ผ ํจ
2. MVVM (Model-View-ViewModel)
โก๏ธ ์๋(View)์ด ํค์ค์คํฌ(ViewModel)๋ฅผ ํตํด ์ง์ ์ฃผ๋ฌธํ๊ณ , ์ฃผ๋ฐฉ(Model)์ด ์์์ ์๋ฆฌ
๐ ํน์ง
• ํค์ค์คํฌ(ViewModel)๊ฐ ์ฃผ๋ฌธ์ ์๋์ผ๋ก ์ฃผ๋ฐฉ(Model)๊ณผ ์ฐ๊ฒฐํ๊ณ , ์๋์ผ๋ก ์๋์๊ฒ ์ฃผ๋ฌธ ์ํ ์ ๋ฐ์ดํธ
• ์ง์(Controller) ์์ด ๋ฐ์ดํฐ์ UI๊ฐ ๋๊ธฐํ๋จ (Model - View Data Binding)
์ ๋ฆฌํ์๋ฉด ์๋์ ๊ฐ๋ค.
- MVC: Controller๊ฐ ์์์ ์ผ๋ก View์ Model์ ์ฐ๊ฒฐํด์ผ ํจ
- MVVM: ViewModel์ด ์์์ View์ Model์ ์๋์ผ๋ก ์ฐ๊ฒฐํด์ค (React์ ์ํ๊ด๋ฆฌ์ฒ๋ผ!)
๋น์ฐํ๊ฒ๋ ์ต๊ทผ์๋ React๋ Vue๋ฅผ ๋ง์ด ์ฐ๋ MVVM์ด ์์ฆ ๋์ธ์ธ๋ฏ ใ .ใ