React와 Vue는 상태를 감지하는 방식에서 철학부터 접근 방식까지 확연히 다릅니다. 어떤 상황에서 어떤 프레임워크가 더 적합한지, 실제 사용 시 고려할 핵심 차이들을 정리해보았습니다.
const obj1 = { count: 1 };
const obj2 = { count: 1 };
console.log(obj1 === obj2); // false (참조값이 다름)
📦 장점 박스
⚠️ 주의점
// 잘못된 예시
const [state, setState] = useState({ count: 0 });
const handleClick = () => {
state.count += 1;
setState(state); // ❌ 참조값 동일 → 리렌더링 안 됨
};
// 올바른 방식
const handleClick = () => {
setState(prev => ({ ...prev, count: prev.count + 1 }));
};
const obj = { count: 0 };
const reactiveObj = new Proxy(obj, {
set(target, key, value) {
console.log(`${key} changed!`);
target[key] = value;
return true;
}
});
reactiveObj.count = 1; // → "count changed!" 출력
📦 장점 박스
⚠️ 주의점
| 기능 | React (얕은 비교) | Vue (Proxy 기반 감지) |
|---|---|---|
| 변경 감지 기준 | 참조값 | 값 자체 |
| 성능 특성 | 데이터 크기 무관, 빠름 | 세밀하지만 느릴 수 있음 |
| 코드 작성 스타일 | 불변성 유지 필요 | 직접 변경 가능 |
| 복잡 상태 대응 | 수동으로 관리 | 자동으로 반응 |
setData(prev => ({ ...prev, count: prev.count + 1 }));
⚠️ 주의점
state.user.name = 'Eundeok'; // 자동으로 반응형 처리됨
⚠️ 주의점
| 특성 | React | Vue |
|---|---|---|
| 상태 관리 철학 | 불변성(immutability) | 반응형(reactivity) |
| 상태 변경 방식 | 새 객체 생성 (직접 수정 ❌) | 직접 수정 가능 |
| 변경 감지 기준 | 참조값 (shallow compare) | Proxy로 속성 추적 |
| 유연성 | 수동 관리, 정교한 제어 | 자동 관리, 직관적 |
React는 명시적이고 예측 가능한 방식으로 대규모 상태 관리에 유리하며, 성능 튜닝 여지가 많습니다.
Vue는 자동화된 감지로 직관적인 개발이 가능하며, 작은 규모의 프로젝트나 빠른 프로토타이핑에 적합합니다.
🎯 선택 가이드:
- 복잡한 상태 관리 + 성능 최적화가 필요하다면 React
- 빠른 개발과 직관적인 상태 제어가 중요하다면 Vue
결국 “어떤 프레임워크가 더 낫다”는 절대적 기준은 없고, 상황에 맞는 선택이 가장 중요합니다.