We want to hear from you!Take our 2021 Community Survey!
This site is no longer updated.Go to react.dev

Hook์˜ ๊ฐœ์š”

These docs are old and wonโ€™t be updated. Go to react.dev for the new React docs.

These new documentation pages teach React with Hooks:

Hook์€ React ๋ฒ„์ „ 16.8๋ถ€ํ„ฐ React ์š”์†Œ๋กœ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Hook์„ ์ด์šฉํ•˜์—ฌ ๊ธฐ์กด Class ๋ฐ”ํƒ•์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์ƒํƒœ ๊ฐ’๊ณผ ์—ฌ๋Ÿฌ React์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import React, { useState } from 'react';

function Example() {
  // "count"๋ผ๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ฐ’์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.  const [count, setCount] = useState(0);
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

useState๋Š” ์šฐ๋ฆฌ๊ฐ€ โ€œHookโ€์—์„œ ์ฒ˜์Œ ๋ฐฐ์šฐ๊ฒŒ ๋  ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ๋Š” ๋‹จ์ง€ ๋ง›๋ณด๊ธฐ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์ดํ•ด๋˜์ง€ ์•Š์•„๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”!

๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ Hook์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์™œ Hook์„ React์— ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  Hook์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์–ด๋– ํ•œ ๋„์›€์„ ์ฃผ๋Š”์ง€ ์„ค๋ช…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฃผ์˜

React 16.8.0์€ Hook์„ ์ง€์›ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฐํฌ์ž…๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ React DOM์„ ํฌํ•จํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”. React Native๋Š” v0.59๋ถ€ํ„ฐ Hook์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์†Œ๊ฐœ ์˜์ƒ

React Conf 2018์—์„œ Sophie Alpert์™€ Dan Abramov๊ฐ€ Hook์„ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์–ด์„œ Ryan Florence๊ฐ€ Hook์„ ์‚ฌ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌํŒฉํ† ๋ง์˜ ๊ณผ์ •์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜์ƒ์—์„œ ํ™•์ธํ•ด๋ณด์„ธ์š”.

์ด๋ฏธ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์— ํ•„์š”ํ•œ ๋ณ€ํ™”์‚ฌํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค.

์–˜๊ธฐํ•˜๊ธฐ์— ์•ž์„œ, Hook์˜ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์„ ํƒ์  ์‚ฌ์šฉ ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์ผ๋ถ€์˜ ์ปดํฌ๋„ŒํŠธ๋“ค ์•ˆ์—์„œ Hook์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์žฅ Hook์ด ํ•„์š” ์—†๋‹ค๋ฉด, Hook์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • 100% ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ Hook์€ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋Š” ๋ณ€ํ™”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ Hook์€ ๋ฐฐํฌ v16.8.0์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

React์—์„œ Class๋ฅผ ์ œ๊ฑฐํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. Hook์˜ ์ ์ง„์  ์ ์šฉ ์ „๋žต์— ๋Œ€ํ•ด ์•„๋ž˜ ์˜์—ญ ํŽ˜์ด์ง€์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Hook์€ ์•Œ๊ณ  ์žˆ๋Š” React ์ปจ์…‰์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์—, Hook์€ props, state, context, refs, ๊ทธ๋ฆฌ๊ณ  lifecycle์™€ ๊ฐ™์€ React ๊ฐœ๋…์— ์ข€ ๋” ์ง๊ด€์ ์ธ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Hook์€ ์ด ๊ฐœ๋…๋“ค์„ ์—ฎ๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

๋™๊ธฐ

Hook์€ ์šฐ๋ฆฌ๊ฐ€ 5๋…„๊ฐ„ React๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๋™์•ˆ ๋ถ€๋”ชํ˜”๋˜ ์ˆ˜ ๋งŽ์€ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. React๋ฅผ ๋ฐฐ์šฐ๋Š” ์ค‘์ด๋“ , ๋งค์ผ ์‚ฌ์šฉํ•˜๋“ , ์‹ฌ์ง€์–ด ๋น„์Šทํ•œ ์ปดํฌ๋„ŒํŠธ ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํ˜ธํ•˜๋“ ์ง€ ๊ฐ„์—, ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ธ์‹ํ•ด ์™”์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์—์„œ ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

React๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ„์— ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋กœ์ง์„ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํ† ์–ด์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ) ์ด์ „๋ถ€ํ„ฐ React๋ฅผ ์‚ฌ์šฉํ•ด์™”๋‹ค๋ฉด, render props์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ์™€ ๊ฐ™์€ ํŒจํ„ด์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์ต์ˆ™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฐ ํŒจํ„ด์˜ ์‚ฌ์šฉ์€ ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ๊ตฌ์„ฑ์„ ๊ฐ•์š”ํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์ถ”์ ์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. React ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณธ๋‹ค๋ฉด, providers, consumers, ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ, render props ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ๋ ˆ์ด์–ด๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ โ€œ๋ž˜ํผ ์ง€์˜ฅ(wrapper hell)โ€œ์„ ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ๊ฑธ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ๋ฌธ์ œ์˜ ์š”์ ์€ ์‹ฌ์ธต์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. React๋Š” ์ƒํƒœ ๊ด€๋ จ ๋กœ์ง์„ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์ข€ ๋” ์ข‹์€ ๊ธฐ์ดˆ ์š”์†Œ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ์ž์‹ ๋งŒ์˜ Hook์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์ข€ ๋” ์•Œ์•„๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

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

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

์ด์— ๋Œ€ํ•ด Effect Hook์—์„œ ๋” ์•Œ์•„๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Class์€ ์‚ฌ๋žŒ๊ณผ ๊ธฐ๊ณ„๋ฅผ ํ˜ผ๋™์‹œํ‚ต๋‹ˆ๋‹ค.

React ์—์„œ์˜ Class ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” JavaScript์˜ this ํ‚ค์›Œ๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. JavaScript์˜ thisํ‚ค์›Œ๋“œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•จ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํฐ ํ˜ผ๋ž€์„ ์ฃผ์—ˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ตฌ์„ฑ์„ ๋งค์šฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ ๋Š” ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ class์˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋“ฑ๋ก๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•ด์•ผ ํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ES2022 public class fields๊ฐ€ ์—†์„ ๋•Œ ์ฝ”๋“œ๋ฅผ ๋งค์šฐ ์žฅํ™ฉํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋“ค์€ props, state, ๊ทธ๋ฆฌ๊ณ  top-down ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ•˜๊ณ ๋„, Class์˜ ์ดํ•ด์—๋Š” ์–ด๋ ค์›€์„ ๊ฒช๊ณ ๋Š” ํ–ˆ์Šต๋‹ˆ๋‹ค. React ๋‚ด์˜ ํ•จ์ˆ˜์™€ Class ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ๋ณ„, ๊ฐ ์š”์†Œ์˜ ์‚ฌ์šฉ ํƒ€์ด๋ฐ ๋“ฑ์€ ์ˆ™๋ จ๋œ React ๊ฐœ๋ฐœ์ž ์‚ฌ์ด์—์„œ๋„ ์˜๊ฒฌ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

React๋Š” ์ง€๋‚œ 5๋…„ ๋™์•ˆ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์–ด ์™”์œผ๋ฉฐ, React์˜ ๊ฐœ๋ฐœ์ง„์€ 5๋…„ ๋’ค์—๋„ React๊ฐ€ ์ง€๊ธˆ๊ณผ ๊ฐ™์ด ๋„๋ฆฌ ์ด์šฉ๋˜๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค. Svelte, Angular, Glimmer ๋“ฑ์—์„œ ๋ณด์—ฌ์ฃผ๋“ฏ์ด, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•ด๋†“๋Š” ๋ฐฉ์‹์—๋Š” ๋†’์€ ์ž ์žฌ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์— ํ•œ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋” ๊ทธ๋ ‡๊ณ ์š”. ๊ฐœ๋ฐœ์ง„์€ ์ตœ๊ทผ Prepack์„ ์‚ฌ์šฉํ•œ ์ปดํฌ๋„ŒํŠธ folding์— ๋Œ€ํ•ด์„œ ์‹คํ—˜ํ•ด์™”๊ณ  ๊ธ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋งŒ, Class ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ๋” ๋А๋ฆฐ ๊ฒฝ๋กœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ์˜๋„ํ•˜์ง€ ์•Š์€ ํŒจํ„ด์„ ์žฅ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. Class๋Š” ์ตœ๊ทผ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์—์„œ๋„ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Class๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œํ™”๋ฅผ ํž˜๋“ค๊ฒŒ ๋งŒ๋“ค๊ณ , ํ•ซ ๋ฆฌ๋กœ๋”ฉ์„ ๊นจ์ง€๊ธฐ ์‰ฝ๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๊ฐ€ ์ตœ์ ํ™” ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ์—์„œ ์œ ์ง€๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์€ API๋ฅผ ์ œ๊ณตํ•˜๊ธธ ์›ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, Hook์€ Class์—†์ด React ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋…์ ์œผ๋กœ React ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ ํ•จ์ˆ˜์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. Hook์€ React์˜ ์ •์‹ ์„ ํฌ์ƒํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. Hook์€ ๋ช…๋ นํ˜• ์ฝ”๋“œ๋กœ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ ๋ณต์žกํ•œ ํ•จ์ˆ˜ํ˜• ๋˜๋Š” ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๋„๋ก ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

Hook ์‚ดํŽด๋ณด๊ธฐ๋Š” Hook์„ ๋ฐฐ์šฐ๋Š”๋ฐ ์ข‹์€ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์ ์ง„์  ์ ์šฉ ์ „๋žต

์š”์•ฝ: React๋กœ๋ถ€ํ„ฐ Class๋ฅผ ์ œ๊ฑฐํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ํ”„๋กœ๋•ํŠธ์˜ ๊ฐœ๋ฐœ์— ๋” ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์œผ๋ฉฐ, ๋ณ€๊ฒฝ๋˜๋Š” API์˜ ์š”์†Œ๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ๊ณต๋ถ€ํ•  ์‹œ๊ฐ„์ด ์—†๋‹ค๋Š” ๊ฑธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Hook์€ ๋งค์šฐ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด๋ฉฐ, Hook์„ ๋ฐฐ์šฐ๊ฑฐ๋‚˜ ์ ์šฉํ•˜๊ธฐ ์ „์— ๋” ๋งŽ์€ ์˜ˆ์‹œ์™€ ์ž์Šต์„œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒŒ ๋‚˜์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ React์— ์ถ”๊ฐ€๋˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ธฐ์ค€์ ์ด ๋งค์šฐ ๋†’๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•ดํ•˜๋Š” ๋…์ž๋“ค์„ ์œ„ํ•ด ๋™๊ธฐ๋ถ€์—ฌ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ž์„ธํ•œ RFC๋ฅผ ์ค€๋น„ํ–ˆ๊ณ  ํŠน์ • ์„ค๊ณ„ ๊ฒฐ์ • ๋ฐ ๊ด€๋ จ ์„ ํ–‰ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ๊ด€์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ •์ ์œผ๋กœ, Hook์€ ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋‚˜๋ž€ํžˆ ์ž‘๋™ํ•จ์œผ๋กœ์จ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Hook์˜ ์ ์šฉ์„ ์„œ๋‘๋ฅผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ธ ๋ณต์žกํ•œ Class ์ปดํฌ๋„ŒํŠธ๋“ค์— ๋Œ€ํ•œ โ€œํฐ ๋ฆฌํŒฉํ† ๋งโ€์„ ํ”ผํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. โ€œHook์„ ์ ์šฉํ•˜๊ธฐโ€์—๋Š” ๊ณ ๋ฏผ์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ ํ•˜์—ฌ, ์ƒ๋Œ€์ ์œผ๋กœ ์ค‘์š”์„ฑ์ด ๋œํ•œ ์ƒˆ ์ปดํฌ๋„ŒํŠธ์—์„œ Hook์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ตœ๊ณ ์˜ ์—ฐ์Šต์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ชจ๋“  ํŒ€์›์ด Hook์— ๋Œ€ํ•ด ์•ˆ์ •๊ฐ์„ ๋А๋ผ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. Hook์„ ์ด์šฉ ํ›„, ๊ธ์ •์ , ๋ถ€์ •์  ์˜๊ฒฌ ๋ชจ๋‘ ์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ๋ฅผ ์ด์šฉํ•ด ๋ณด๋‚ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

React์˜ ๊ฐœ๋ฐœ์ž๋“ค์€ ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ Class ์‚ฌ๋ก€๋ฅผ Hook์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์„ ์—ผ๋‘์— ๋‘๊ณ ๋Š” ์žˆ์ง€๋งŒ, ๋ฏธ๋ž˜์—๋„ ๊ณ„์† Class ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ง€์›ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์Šค๋ถ์€ ์ˆ˜๋งŒ ๊ฐœ์˜ Class ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ์ด๋ฅผ ์žฌ์ž‘์„ฑํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์—, ์ƒˆ๋กœ์šด ์ฝ”๋“œ์—์„œ ๊ธฐ์กด ์ฝ”๋“œ์™€ ๋‚˜๋ž€ํžˆ Hook์„ ์‚ฌ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Hook FAQ ํŽ˜์ด์ง€์—์„œ Hook์— ๋Œ€ํ•œ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

์ด ํŽ˜์ด์ง€๋ฅผ ๋‹ค ์ฝ์—ˆ์„ ๋•Œ, Hook์ด ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง ๊ตฌ์ฒด์ ์œผ๋กœ ๋ช…ํ™•ํ•˜์ง„ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”! ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ๊ฐ€์„œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ Hook์— ๋Œ€ํ•ด ๋ฐฐ์›Œ ๋ด…์‹œ๋‹ค!

Is this page useful?Edit this page