ํ ํ๋ฆฟ์ ๋ฐ์ดํฐ ํํ์ ๋ ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋์์ฃผ๋ ์์ฑ.
ํ ํ๋ฆฟ ์์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
<p>๊ฐ์๊ฐ ์กด์ฌ ํฉ๋๊น?:</p>
<span>{{ teacher.lectures.length > 0 ? 'Yes' : 'No' }}</span>
์์ ๊ฐ์ด ํ
ํ๋ฆฟ ํํ์ ๋ด ์ฝ๋๊ฐ ๊ธธ์ด์ง ๊ฒฝ์ฐ, ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง ์ ์๋ค.
์ด๋ฌํ ์ฝ๋๋ฅผ ์ฌ๋ฌ๊ณณ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ผ ๊ฒ์ด๋ค.
์ด๋ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ณ์ฐ๋ ์์ฑ(computed property) ์ด๋ค.
์์ ์ฝ๋์์ computed๋ฅผ ์ฌ์ฉํด๋ณด์.
<p>๊ฐ์๊ฐ ์กด์ฌ ํฉ๋๊น?:</p>
<span>{{ hasLecture }}</span>
const hasLecture = computed(() => {
return teacher.lectures.length > 0 ? 'Yes' : 'No'
})
template ํํ์ ๋ด ์ฝ๋๊ฐ ๋์ฑ ๊น๋ํ๊ณ ๋ช
ํํ๊ฒ ๋์๋ค.
๋ํ, computed๋ก ์ธํด ๋ค๋ฅธ ๊ณณ์์๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
์ด์ฒ๋ผ computed๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ์ํด์์ด๋ค.
1) computed ์์ฑ์ ๋์์ผ๋ก ์ ํ data ์์ฑ์ด ๋ณํ์ ๋ ์ด๋ฅผ ๊ฐ์งํ๊ณ ์๋์ผ๋ก ๋ค์ ์ฐ์ฐํด์ค๋ค.
2) ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ
computed๋ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์ ์ํฌ๋ฟ๋ง ์๋๋ผ, ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ ์๋์ผ๋ก ๋ค์ ์ฐ์ฐํด์ฃผ๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์์ ์์ ์ฝ๋์์, teacher.lectures.length
๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด, ์๋์ผ๋ก ๋ค์ ์ฐ์ฐํ์ฌ ํ๋ฉด์ ๊ฐฑ์ ํด ์ค ๊ฒ์ด๋ค.
1) computed ์์ฑ์ ์ธ์๋ฅผ ๋ฐ์ง ์๋๋ค.
2) HTTP ํต์ ๊ณผ ๊ฐ์ด ์ปดํจํ ๋ฆฌ์์ค๊ฐ ๋ง์ด ํ์ํ ๋ก์ง์ ์ ์ํ์ง ์๋๋ค.
computed์์ฑ์ ์ธ์๋ฅผ ๋ฐ์ง ์๋๋ค.
์ฆ, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ ๋์ํ์ง ์๋๋ค.
const hasLecture = computed((teacher.lectures.length ? ) => {
return teacher.lectures.length > 0 ? 'Yes' : 'No'
})
๋ํ, httpํต์ ์ฝ๋๋ฅผ ์ ์ธํ๋ค.
computed ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ
ํ๋ฆฟ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค.
axios๊ฐ์ ์ฝ๋๋ methods๋ watch์ ๋ฃ๋ ๊ฒ์ด ์ ํฉํ๋ค.
computed์์ฑ ๋์ ๋ฉ์๋์ ๊ฐ์ ํจ์๋ฅผ ์ ์ํ ์๋ ์๋ค.
const hasLecture = computed(() => {
return teacher.lectures.length > 0 ? 'Yes' : 'No'
})
function existLecture() {
return teacher.lectures.length > 0 ? 'Yes' : 'No'
}
์ต์ข
๊ฒฐ๊ณผ๋ ๋์ผํ๋ค.
๊ทธ๋ผ computed์ methods์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๋ฐ๋ก, computed ์์ฑ์ ์ข ์ ๋์์ ๋ฐ๋ผ ์ ์ฅ(์บ์ฑ)๋๋ค๋ ๊ฒ์ด๋ค.
computed ์์ฑ์ ํด๋น ์์ฑ์ด ์ข ์๋ ๋์์ด ๋ณ๊ฒฝ๋ ๋๋ง ํจ์๋ฅผ ์คํํ๋ค. ์ฆ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ํ, computed ์์ฑ์ธ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์์ฒญํด๋ ๋ค์ ๊ณ์ฐํ์ง ์๊ณ ์ด๋ฏธ ๊ณ์ฐ๋์ด ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋ฐํํ๋ค. ๋ ๋๋ง์ ๋น์ฉ์ด ์ ๊ฒ ๋๋ ์ ์ด๋ค.
์ด์ ๋นํด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ ๋๋ง์ ๋ค์ ํ ๋๋ง๋ค ํญ์ ํจ์๋ฅผ ์คํํ๋ค.
1) computed๋ ์บ์ฑ๋๋ค.
2) computed๋ ์บ์ฑ์ผ๋ก ์ธํด ๋ ๋๋ง์ ๋น์ฉ์ด ์ ๊ฒ๋ ๋ค.
3) method๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ ์ ์๋ค.
Vue๋ Vue ์ธ์คํด์ค์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๊ด์ฐฐํ๊ณ ์ด์ ๋ฐ์ํ๋ ๋ณด๋ค ์ผ๋ฐ์ ์ธ watch ์์ฑ์ ์ ๊ณตํ๋ค.
computed์ watch ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ๋ค.
๊ทธ๋ผ computed์ watch์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น?
๋ฐ๋ก, computed๋ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ด๊ณ , watch๋ ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ์ฐจ์ด๊ฐ ์๋ค.
computed ์์ฑ์ ๊ณ์ฐํด์ผ ํ๋ ๋ชฉํ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ ๋ฐฉ์์ผ๋ก ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ด๊ณ , watch๋ ๊ฐ์ํ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด ์ ์ธํ ํจ์๋ฅผ ์คํํ๋ผ๋ ๋ฐฉ์์ผ๋ก ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ด ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ๋ณด๋ค ์ฝ๋ ๋ฐ๋ณต์ด ์ ์ ๋ฑ ์ฐ์ํ๋ค๊ณ ํ๊ฐํ๋ ๊ฒฝํฅ์ด ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก, ๋ณต์กํ ๋ก์ง์ด๋ ๋ฌด๊ฑฐ์ด ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ ๊ฒฝ์ฐ watch๋ฅผ ์ฌ์ฉํ๊ณ , ์ฐ์ฐ์์
์ computed๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ค์ ์ฝ๋์์ computed(์ ์ธํ ํ๋ก๊ทธ๋๋ฐ)์ watch(๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ)์ ์ฐจ์ด๋ฅผ ๋ณผ ์ ์๋ค.
const fullName = computed(() => {
return firstName.value + ' ' + lastName.value
}
watch(firstName, (cur, prev) => {
fullName.value = cur + ' ' + lastName.value;
})
watch(lastName, (cur, prev) => {
fullName.value = firstName.value +' ' + cur;
})
https://v2.ko.vuejs.org/v2/guide/computed.html#computed-%EC%86%8D%EC%84%B1
์ธํ๋ฐ - Vue3 ์๋ฒฝ ๋ง์คํฐ: ๊ธฐ๋ณธํธ ์ง์ฝ๋ฉ