็„ก์ œ

State (์Šคํ…Œ์ดํŠธ) ๋ณธ๋ฌธ

<React>

State (์Šคํ…Œ์ดํŠธ)

yo-u-loo 2026. 7. 8. 15:58

 

๐ŸŸก State

React ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์œ ์ง€ ๋ฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด.

์ปดํฌ๋„ŒํŠธ์˜ '๊ธฐ์–ต ์žฅ์น˜' ์—ญํ• ์„ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์‘๋‹ต ๋“ฑ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฐ’๋“ค์„ ์ €์žฅํ•œ๋‹ค.

 

โ—ผ๏ธ ์ฃผ์š” ํŠน์ง•

  • ๋ณ€๊ฒฝ ์‹œ ์ž๋™ ๋ฆฌ๋ Œ๋”๋ง: State ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด React๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๋ Œ๋”๋ง(Re-rendering)ํ•œ๋‹ค. ํ™”๋ฉด์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ๊ด€๋ฆฌ: ์™ธ๋ถ€(๋ถ€๋ชจ)๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›๋Š” Props์™€ ๋‹ฌ๋ฆฌ, State๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋ถˆ๋ณ€์„ฑ(Immutability) ์œ ์ง€: State๋Š” ์ง์ ‘ ์ˆ˜์ •ํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ React๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜(Setter)๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค.

 

โ—ผ๏ธ ๊ตฌ์กฐ

useState๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

useState('์ดˆ๊ธฐ๊ฐ’') ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํฌ๊ธฐ๊ฐ€ 2์ธ ๋ฐฐ์—ด(Array)์„ ๋ฆฌํ„ดํ•˜๋ฉฐ, ๋ณดํ†ต ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฆ„์„ ์ง€์ •ํ•ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ธ๋ฑ์Šค 0 (count): ํ˜„์žฌ์˜ ์ƒํƒœ ๊ฐ’์„ ์ฝ๋Š” ๋ณ€์ˆ˜. (๋ฐ์ดํ„ฐ)
  • ์ธ๋ฑ์Šค 1 (setCount): ํ˜„์žฌ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜. (์ผ๋ฐ˜์ ์œผ๋กœ set + ์ƒํƒœ์ด๋ฆ„ ๊ทœ์น™์œผ๋กœ ๋ช…๋ช…)

 

โ—ผ๏ธ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  (์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€์˜ ์ฐจ์ด)

์ผ๋ฐ˜ ๋ณ€์ˆ˜(let, const)๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ React๊ฐ€ ์ด๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•ด ํ™”๋ฉด์ด ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋Š”๋‹ค.

// โŒ ์ž˜๋ชป๋œ ์˜ˆ์‹œ: ์ผ๋ฐ˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
const Counter = () => {
  let count = 0; 
  
  const plus = () => {
    count = count + 1;
    console.log(count); // ์ฝ˜์†”์—์„œ ๊ฐ’์€ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ, ํ™”๋ฉด(UI)์€ 0์— ๋ฉˆ์ถฐ ์žˆ์Œ
  }
  
  return (
    <div>
      <h2>{count}</h2>
      <button onClick={plus}>+</button>
    </div>
  );
}
  • ๋ฐ˜๋ฉด State๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค React๊ฐ€ UI๋ฅผ ์ƒˆ ๋ฐ์ดํ„ฐ๋กœ ์ž๋™ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

โ—ผ๏ธ State ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• (useState Hook)

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” useState ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

import React, { useState } from 'react';

function Counter() {
  // ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ํ†ตํ•ด [ํ˜„์žฌ ๊ฐ’, ๋ณ€๊ฒฝ ํ•จ์ˆ˜]๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์Œ
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>ํ˜„์žฌ ์นด์šดํŠธ: {count}</p>
      <button onClick={() => setCount(count + 1)}>์ฆ๊ฐ€</button>
      <button onClick={() => setCount(count - 1)}>๊ฐ์†Œ</button>
    </div>
  );
}

 

 

๐Ÿ“โ€Š POINT ๐Ÿ“โ€Š

โœ”๏ธ React์—์„œ State๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์›€์ง์ด๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด๋‹ค. โœ”๏ธ

โœ”๏ธ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด๋‚˜ ์„œ๋ฒ„ ์‘๋‹ต์ฒ˜๋Ÿผ ์–ธ์ œ๋“  ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” State๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. โœ”๏ธ

โœ”๏ธ ์ง€์ •๋œ ๋ณ€๊ฒฝ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ์•ˆ์ „ํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธํ•ด์•ผ๋งŒ ํ™”๋ฉด์— ์ตœ์‹  ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜์˜๋œ๋‹ค. โœ”๏ธ

 

 

๐Ÿ“‹ Props vs State ์ฐจ์ด์  ๐Ÿ“‹

๊ตฌ๋ถ„ Props (ํ”„๋กญ์Šค) State (์Šคํ…Œ์ดํŠธ)
๊ฐœ๋… ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€(๋ถ€๋ชจ)๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›๋Š” ์†์„ฑ ๊ฐ’ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ƒํƒœ ๊ฐ’
๊ฐ€๋ณ€์„ฑ ์ฝ๊ธฐ ์ „์šฉ (๋ถˆ๋ณ€) / ์ž์‹ ๋‚ด์—์„œ ์ˆ˜์ • ๋ถˆ๊ฐ€ ์ˆ˜์ • ๊ฐ€๋Šฅ / ๋ณ€๊ฒฝ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ
๊ณตํ†ต์  ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๋ฉด์„œ ์ƒˆ๋กœ์šด UI๋ฅผ ๋ฆฌํ„ด(๋ Œ๋”๋ง)ํ•ฉ๋‹ˆ๋‹ค.

 

'<React>' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React์—์„œ map ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ  (0) 2026.07.14
Hash URL  (0) 2026.07.14
Event (์ด๋ฒคํŠธ)  (0) 2026.07.08
Props (Properties, ํ”„๋กญ์Šค)  (0) 2026.07.07
Component (์ปดํฌ๋„ŒํŠธ)  (0) 2026.07.07