Vanilla JavaScript
: 프레임워크나 라이브러리 없이 순수 JavaScript 로만 작성된 코드
주요 특징
예시
<!DOCTYPE html>
<html lang="ko">
<head>
<title>Vanilla JS Counter</title>
</head>
<body>
<div>
<h1 id="counter">카운터: 0</h1>
<button id="increaseBtn">증가</button>
</div>
<script>
let count = 0; // 상태를 관리하는 변수
const counter = document.getElementById("counter");
const button = document.getElementById("increaseBtn");
button.addEventListener("click", () => {
count += 1; // 상태 업데이트
counter.textContent = `카운터: ${count}`; // 직접 DOM 업데이트
});
</script>
</body>
</html>
React(페이스북에서 개발)
: 컴포넌트 기반 UI 라이브러리
주요 특징
예시
import React, { useState } from "react";
const Counter = () => {
const [count, setCount] = useState(0);
return (
<div>
<h1>카운터: {count}</h1>
<button onClick={() => setCount(count + 1)}>증가</button>
</div>
);
};
export default Counter;
Vue.js
: Progressive 프레임워크로, React보다 배우기 쉽고 문법이 간결
Progressive 프레임워크 란?
주요 특징
예시
<template>
<div>
<h1>카운터: {{ count }}</h1>
<button @click="increment">증가</button>
</div>
</template>
<script>
export default {
data() {
return {
count: 0,
};
},
methods: {
increment() {
this.count += 1;
},
},
};
</script>
| 특징 | React | Vue.js | Vanilla JS |
|---|---|---|---|
| 작성 방식 | JSX(HTML + JavaScript) | HTML 템플릿 기반 | 순수 JavaScript와 HTML |
| 데이터 바인딩 | 단방향 데이터 바인딩 | 양방향 데이터 바인딩 | 직접 DOM 업데이트 |
| DOM 업데이트 | 가상 DOM 사용 (성능 최적화) | 가상 DOM 사용 (최적화) | 수동으로 DOM 수정 |
| 재사용성 | 컴포넌트 기반 구조 | 컴포넌트 기반 구조 | 코드 중복 많음 |
바인딩 (Binding)이란?