# ์ด๋ฒคํŠธ ๋ฐœ์ƒ - setup() Vue 3

์ด๋ฒคํŠธ ๋ฐœ์ƒ(event emit)์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๋Š” ์ปดํฌ๋„ŒํŠธ ํ†ต์‹  ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ปดํฌ์ง€์…˜์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ ๋ฐœ์ƒ

๊ธฐ์กด์— ์ธ์Šคํ„ด์Šค ์˜ต์…˜ ์†์„ฑ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ $emit() API์˜€์Šต๋‹ˆ๋‹ค.

<script>
export default {
  methods: {
    changeTitle() {
      this.$emit('change');
    }
  }
}
</script>

์œ„ ์ฝ”๋“œ๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ change ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ $emit() API๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# setup()์—์„œ ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

์ด๋ฒˆ์—” setup() ํ•จ์ˆ˜์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

<script>
export default {
  setup(props, context) {
    context.emit('change');
  }
}
</script>

์œ„ ์ฝ”๋“œ๋Š” setup() ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ context๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. setup() ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ”„๋กญ์Šค ์†์„ฑ์„ ์˜๋ฏธํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” emit์„ ๋น„๋กฏํ•˜์—ฌ attrs, slots, expose ๋“ฑ์„ ๊ฐ€์ง„ ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด(Context Object) (opens new window)๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด context.emit()์€ ๊ธฐ์กด $emit()์™€ ์‚ฌ์šฉ๋ฒ•์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ์˜ ์ธ์ž๋ฅผ ๋„˜๊ธธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

context.emit('change'); // change ์ด๋ฒคํŠธ๋งŒ ๋ฐœ์ƒ
context.emit('change', 100); // change ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์ธ์ž 100์„ ๊ฐ™์ด ๋„˜๊น€

# ์ด๋ฒคํŠธ ๋ฐœ์ƒ์˜ ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ๋ฌธ๋ฒ•

context.emit()์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

<script>
export default {
  setup(props, { emit }) {
    emit('change');
  }
}
</script>

์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ props๋Š” ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง์„ ์ผ์„ ๋•Œ ๋ฐ˜์‘์„ฑ์ด ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ–ˆ์ง€๋งŒ, emit์€ ๋ฐ˜์‘์„ฑ์ด ์ฃผ์ž…๋œ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ๋‹จ์ˆœํžˆ ํ˜ธ์ถœ๋งŒ ํ•˜๋Š” API์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜์‘์„ฑ์ด ์ œ๊ฑฐ๋˜๋Š” ๋ถ€๋ถ„์„ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.