# ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ์•„๋ž˜ 2๊ฐ€์ง€์— ์†Œ๋ชจ๋˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

1. ๋ฐฉ๊ธˆ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์ด ์ž˜ ๋Œ์•„๊ฐ€๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์‹œ๊ฐ„
2. ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ๊ธฐ์กด์— ์žˆ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊นจํŠธ๋ฆฌ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์‹œ๊ฐ„

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์œ„ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ ๊ฒ€ํ•˜๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ํˆฌ์ž…๋˜์–ด์„œ ๋‚จ์ด ์ง  ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ๊ทธ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์•…์˜ํ–ฅ์„ ์ฃผ๋Š”์ง€ ๋ถ„์„ํ•˜๊ณ  ํ™•์ธํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋” ๋งŽ์ด ๋“ค์–ด๊ฐ€์ฃ .

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„์„ ์ค„์—ฌ์ฃผ๊ณ  ๊ฐœ๋ฐœ์ž์˜ ์ž์‹ ๊ฐ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก ๋” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ์ด ๋†’์•„์ง€์ฃ .

# ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ ํ•  ๊ฒƒ์ธ๊ฐ€?

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ ํ•  ๊ฒƒ์ธ๊ฐ€ ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋ชฉ์ ์€ ๊ตฌํ˜„๋œ ์ฝ”๋“œ์˜ ํ๋ฆ„์ด๋‚˜ ๋กœ์ง์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ๋ฒ„ํŠผ ํด๋ฆญ๊ณผ ํ‚ค ์ž…๋ ฅ ๋“ฑ์˜ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ UI๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „๊ฐœ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.

<template>
  <div>
    <button @click="addCounter">add</button>
    <p>{{ counter }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      counter: 0
    }
  },
  methods: {
    addCounter() {
      this.counter = this.counter + 1;
    }
  }
}
</script>

์œ„ ์ฝ”๋“œ๋Š” add ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ counter ๊ฐ’์„ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์•„๋งˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋”ฐ๋กœ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด ๋Œ€๋ถ€๋ถ„ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด๋ณด๊ณ  counter ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š”์ง€ ํ™•์ธํ•  ๊ฒ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋‹ค์Œ 2๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. add ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ 'counter' ๊ฐ’์ด ์ฆ๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธ
2. add ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์ฆ๊ฐ€๋œ 'counter' ๊ฐ’์ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š”์ง€ ํ™•์ธ

์œ„ 2๊ฐœ ์‹œ๋‚˜๋ฆฌ์˜ค ์ค‘ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์ž‘์„ฑ๋œ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” 2๋ฒˆ์ž…๋‹ˆ๋‹ค. 1๋ฒˆ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ๊ด€์ ์—์„œ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ˆ˜์ค€์ด์ฃ .

์ด์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌํ˜„ํ•œ ๋กœ์ง์ด๋‚˜ ์ฝ”๋“œ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ • ์ด๋ฒคํŠธ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋  UI๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# ํ…Œ์ŠคํŒ… ๋„๊ตฌ

ํ…Œ์ŠคํŒ… ๋„๊ตฌ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง์„ ํ•  ๋•Œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์•ˆ์ •์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ผ์ˆ˜๋ก, ๊ทธ๋ฆฌ๊ณ  ๊ฐ™์ด ํ˜‘์—…ํ•˜๋Š” ํŒ€์›์ด ๋งŽ์„์ˆ˜๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ์ž ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์—์„œ ์˜ค๋Š” ์—๋Ÿฌ๋ฅผ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ค‘์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ŠคํŒ… ๋„๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฑ•ํ„ฐ์—์„œ๋Š” Jest์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.