# computed ์†์„ฑ

์ปดํ“จํ‹ฐ๋“œ(computed) ์†์„ฑ์€ ํ…œํ”Œ๋ฆฟ์˜ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์„ ๋” ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# computed ์†์„ฑ ์˜ˆ์‹œ

<div>{{ message.split('').reverse().join('') }}</div>

์œ„ ์ฝ”๋“œ๋Š” message๋ผ๋Š” ๋ฐ์ดํ„ฐ ์†์„ฑ์˜ ๋ฌธ์ž์—ด ์ˆœ์„œ๋ฅผ ์—ญ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. message ๊ฐ’์ด ๋งŒ์•ฝ Hello๋ผ๋ฉด ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š” ๊ฐ’์€ olleH์ž…๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ฝง์ˆ˜์—ผ ๊ด„ํ˜ธ ์•ˆ์—๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ ์†์„ฑ์˜ ๊ฐ’๋งŒ ํ‘œ์‹œํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด์žฅ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์–ด๋Š ์ •๋„ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ๊ณ„์‚ฐ์‹์ด ํ…œํ”Œ๋ฆฟ์— ๋งŽ์•„์ง€๋ฉด ํ…œํ”Œ๋ฆฟ์˜ ๊ฐ€๋…์„ฑ์ด ํ˜„์ €ํžˆ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด computed ์†์„ฑ์„ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

computed: {
  reverseMessage() {
    return this.message.split('').reverse().join('');
  }
}

๋ฌธ์ž์—ด์„ ์—ญ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์„ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์— ์ •์˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข…์ ์œผ๋กœ ํ™”๋ฉด์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

<div>{{ reverseMessage }}</div>

# computed ์†์„ฑ์˜ ์žฅ์ 

์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์€ ๋‹จ์ˆœํžˆ ๋ทฐ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๋งŒ ๋†’์—ฌ์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์˜ ๋Œ€์ƒ์œผ๋กœ ์ •ํ•œ data ์†์„ฑ์ด ๋ณ€ํ–ˆ์„ ๋•Œ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์—ฐ์‚ฐํ•ด์ฃผ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•ž์—์„œ ์‚ดํŽด๋ณธ ์ฝ”๋“œ์—์„œ message ๊ฐ’์„ Hello Vue.js๋กœ ๋ฐ”๊พธ๋Š” ์ˆœ๊ฐ„ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์ด ๋‹ค์‹œ ์—ฐ์‚ฐ์„ ํ•ด์„œ ํ™”๋ฉด์— sj.euV olleH๋ฅผ ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค. ํ•œ๋ฒˆ message ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋ณด๊ณ  ๋‹ค์‹œ ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ•ด๋ณด์„ธ์š”.

# computed ์†์„ฑ ์ฃผ์˜์‚ฌํ•ญ

์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์‚ฌํ•ญ์€ ๋‹ค์Œ 2๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  1. ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์€ ์ธ์ž๋ฅผ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
  2. HTTP ํ†ต์‹ ๊ณผ ๊ฐ™์ด ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•œ ๋กœ์ง์„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

# 1. ์ธ์ž๋ฅผ ๋ฐ›์ง€ ์•Š๋Š” computed

์ปดํ“จํ‹ฐ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๊ณ  ๋‚˜์„œ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋‹ค๊ฐ€ ๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ์‹œ๋„๋ฅผ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

<div>{{ reverseMessage(false) }}</div>
computed: {
  reverseMessage(isReversed) {
    return isReversed ? this.message.split('').reverse().join('') : this.message;
  }
}

์œ„์˜ ์ฝ”๋“œ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์— ์„ ์–ธํ•œ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์— ๊ด„ํ˜ธ๊ฐ€ ์ƒ๊ธฐ๋Š” ์ˆœ๊ฐ„ ํ•ด๋‹น ํ…œํ”Œ๋ฆฟ์„ ์‹ค์ œ DOM์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

# 2. HTTP ํ†ต์‹  ์ฝ”๋“œ๋ฅผ ์ œ์™ธํ•˜๋Š” computed

ํ”ํžˆ ์ €์ง€๋ฅด๋Š” ๋˜ ๋‹ค๋ฅธ ์‹ค์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

data: {
  message: ''
},
computed: {
  reverseMessage() {
    var vm = this;
    axios.get('/message').then(function(response) {
      vm.message = response.data;
    });
    return this.message.split('').reverse().join('');
  }
}

์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์— HTTP ์š”์ฒญ๊ณผ ๊ฐ™์€ ๋น„์‹ผ ๋น„์šฉ์˜ ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํ“จํ‹ฐ๋“œ ์†์„ฑ์€ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ HTTP ํ†ต์‹ ๊ณผ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ € ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ํ• ์• ๋˜๋Š” ์ฝ”๋“œ๋“ค์€ watch๋‚˜ methods์— ๋„ฃ๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.