let vm = Vue.createApp({
name: "App",
data() {
return { name: ""};
},
}).mount("#app");
마운트???????
Vue.js에서 "마운트(mount)"란 애플리케이션 인스턴스를 특정 DOM 요소에 연결하여 렌더링하는 과정을 의미
- 마운트의 개념
Vue 애플리케이션은 초기에는 단순한 JavaScript 객체일 뿐이다. 그런데 mount 과정이 실행되면, Vue가 실제 DOM과 연결되면서 화면에 컴포넌트가 렌더링된다.
즉, Vue의 가상 DOM(Virtual DOM)이 실제 HTML DOM과 결합하는 순간이라고 보면 된다!
계산된 속성 (Computed Property) ?
- 계산된 속성은 의존하는 데이터가 변경될 때마다 자동으로 다시 계산된다.
- 즉, 데이터가 변하지 않으면 캐시된 값을 그대로 사용하여 성능을 최적화한다.
- 계산된 속성은 기본적으로 getter(읽기)와 setter(쓰기) 메서드를 가질 수 있다.
- React의 useMemo 와 동일한 역활이다.
Vue.js에서 계산된 속성은 템플릿에서 값을 출력할 때 사용되는 캐싱되는 속성이다. 기본적으로 data 속성이나 다른 속성을 기반으로 자동으로 값을 계산하고, 의존하는 값이 변경될 때만 다시 계산된다!
❌ 템플릿에서 직접 처리하는 경우 (비효율적!)
매 렌더링마다 동일한 연산을 반복하게 되어서 비효율적
<template>
<p>{{ message.split('').reverse().join('') }}</p>
</template>
<script setup>
import { ref } from 'vue';
const message = ref('Hello Vue!');
</script>
✅ 계산된 속성을 사용하는 경우 (효율적!)
<template>
<p>{{ reversedMessage }}</p>
</template>
<script setup>
import { ref, computed } from 'vue';
const message = ref('Hello Vue!');
const reversedMessage = computed(() => {
return message.value.split('').reverse().join('');
});
</script>
computed()를 사용하면 message 값이 바뀔 때만 reversedMessage가 다시 계산됨<template>
<p>계산된 속성: {{ computedNumber }}</p>
<p>메서드: {{ methodNumber() }}</p>
</template>
<script setup>
import { ref, computed } from 'vue';
const number = ref(10);
// computed 사용
const computedNumber = computed(() => {
console.log('Computed 실행됨!');
return number.value * 2;
});
// method 사용
const methodNumber = () => {
console.log('Method 실행됨!');
return number.value * 2;
};
</script>
✅ computedNumber는 number가 바뀔 때만 다시 계산됨.
❌ methodNumber()는 매번 호출될 때마다 실행됨 → 불필요한 연산 발생 가능.
즉, 같은 값을 여러 번 계산해야 한다면 computed가 적절하고, 매번 새 값을 계산해야 한다면 methods가 적절하다.
JS 코드에서 데이터가 변경된 경우
watch 옵션 객체로 정의
watch: {
x(current, old) { // return은 없다
console.log(`## x : ${old} --> ${current}`);
var result = Number(current) + Number(this.y);
if (isNaN(result)) this.sum = 0;
else this.sum = result;
},
y(current, old) {
console.log(`## y : ${old} --> ${current}`);
var result = Number(this.x) + Number(current);
if (isNaN(result)) this.sum = 0;
else this.sum = result;
},
},
watch ?
- watch는 주로 데이터의 변화를 감지하고 특별한 처리가 필요할 때 유용하다.
- 데이터의 변화를 감지하고 화면은 변하지 않으면서 비즈니스 로직의 변수 값만 바꾸고 싶을 때 사용
위의 코드에서 watch를 사용하면 x와 y 값이 변할 때마다 덧셈 결과를 계산해서 sum에 반영하게 된다.
watch / computed 차이점
watch는 x나 y의 값이 변할 때마다 계산을 직접 해주어야 한다.
computed는 x와 y 값이 바뀔 때마다 sum이 자동으로 다시 계산해서 업데이트 된다.
✅ 특정 데이터(`data`, `ref`)가 변경될 때 실행하는 메서드를 정의하는 옵션
✅ `computed`는 값을 반환하지만, `watch`는 값을 감지하고 실행
✅ 비동기 처리(API 호출, 타이머, 파일 저장 등)에 적합
✅ 객체 내부 속성 감지시 `{ deep: true }` 옵션 사용
✅ 초기 실행 필요할 경우 `{ immediate: true }`옵션 사용
computed와 달리, watch는 값을 반환하는 것이 아니라, 특정 동작을 실행한다는 점이 가장 큰 차이점!
.......@@
v-on:[이벤트 이름]="표현식@[이벤트 이름]="표현식"@click="test($event)"



기본 이벤트(Default Event)
<a>, 브라우저 화면에서 마우스 오른쪽 클릭 → 컨텍스트 메뉴 출력, <form> 요소 내부의 submit 버튼 클릭 → 서버로 전송event.preventDefault()수식어를 통한 기본 이벤트 차단
@이벤트.prevent → 해당 이벤트를 차단, event.preventDefault() 호출 효과
<div @contextmenu.prevent
style="position: absolute; left: 5px; top: 5px; right: 5px; bottom: 5px">
<a href="https://facebook.com" @click="confirmFB">페이스북</a>
</div>
이벤트 전파의 3단계

버블링의 차단 event.stopPropagation() 호출
관련 수식어
.stop 이벤트 전파 중단, event.stopPropagation() 호출과 동일.capture CAPTURING_PHASE 단계에서만 이벤트 발생.self RASING_PHASE 단계일 때만 이벤트 발생1. 이벤트 전파 (Event Propagation)
이벤트 전파는 이벤트가 DOM 트리에서 어떻게 흐르는지에 대한 전체적인 과정이다.
이벤트는 DOM 요소에서 발생한 후 부모 요소나 자식 요소로 "전파" 된다.
전파 방식에는 두 가지가 있다.
① 버블링 (Bubbling): 자식 요소에서 발생한 이벤트가 부모 요소로 전파된다.
: 일반적이다.
② 캡처링 (Capturing): 부모 요소에서 발생한 이벤트가 자식 요소로 전파된다.
2. 이벤트 버블링 (Event Bubbling)
버블링은 이벤트가 가장 안쪽의 요소에서 바깥쪽 요소로 전파되는 방식이다.
즉, 이벤트가 자식 요소에서 발생하면 그 이벤트는 부모 요소로 "버블링"되어 올라가게 된다.
웹에서 이벤트가 발생하면, 해당 이벤트는 특정 요소에서만 작동하는 게 아니라, DOM 트리를 따라 이동하면서 다른 요소에도 영향을 줄 수 있다!
이 과정을 이벤트 전파(Event Propagation)라고 하고, 크게
3단계로 나뉜다.
✅ 이벤트 전파 3단계
window → document → 부모 → 자식 방향자식 → 부모 → document → window 방향✅ 이벤트 전파를 제어하는 방법
event.stopPropagation() → 이벤트 전파(캡처링/버블링) 중단event.preventDefault() → 기본 동작(링크 이동 등) 중단once 수식어
키코드 관련 이벤트 수식어
@이벤트.enter="..." 엔터를 쳤을 때 이벤트 핸들러 호출@keyup.ctrl.enter="..." CTRL+ENTER 조합 시 이벤트 핸들러 호출@keyup.ctrl.c="..." CTRL+C 조합마우스 관련 수식어
exact 수식어
다른 수식어와 조합해 이벤트를 등록할 때 → 정확하게 일치하는 조합으로 이벤트가 일어나야 핸들러가 실행되도록 설정
<button @click.ctrl.exact="onlyCtrlClick">Ctrl만 눌렸을 때</button>
-> 만약 Ctrl + Shift를 같이 누르면 실행되지 않음!
언제 사용?
Ctrl만 눌렀을 때만 특정 기능을 실행하고 싶을 때