2.React State

React state๋ž€?

React์—์„œ state(์ƒํƒœ)๋Š” components(๊ตฌ์„ฑ ์š”์†Œ) ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๊ตฌ์„ฑ ์š”์†Œ ์ž์ฒด์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด React๋Š” ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ•ด๋‹น ํ•˜์œ„ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค.

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(prev => prev + 1)}>Increment</button>
    </div>
  );
}

์ด ์˜ˆ์—์„œ Counter ๊ตฌ์„ฑ์š”์†Œ๋Š” useState๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ count๋ผ๋Š” ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค. ๋˜ํ•œ ์ƒํƒœ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด setCount ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ต๋ช… ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ setCount ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ count ์ƒํƒœ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ React๋Š” ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์—ฌ ์ƒˆ count ๊ฐ’์ด ํ‘œ์‹œ๋˜๋„๋ก ํ•œ๋‹ค.

'useState'๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ๊ตฌ์„ฑ ์š”์†Œ๋‚˜ ๊ตฌ์„ฑ ์š”์†Œ์˜ 'props'๋ฅผ ์ˆ˜๋™์œผ๋กœ ์กฐ์ž‘ํ•  ํ•„์š” ์—†์ด ๊ธฐ๋Šฅ์  ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์ƒํƒœ ๊ฐ’์„ ์ •์˜ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

DRY ์›์น™

"Don't Repeat Yourself"(DRY)๋Š” ์ฝ”๋“œ ๋ฐ˜๋ณต์„ ์ค„์ด๊ณ  ๊ธฐ์กด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜นํ˜ธํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์›์น™์ด๋‹ค. ์ด ์›์น™์€ ์ง€์‹์ด๋‚˜ ๋…ผ๋ฆฌ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์ด ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋‹จ์ผํ•˜๊ณ  ๋ชจํ˜ธํ•˜์ง€ ์•Š์€ ํ‘œํ˜„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•œ๋‹ค.

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

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

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

๊ทธ๋ž˜์„œ ์ž‘์—…์„ ํ•˜๋ฉด์„œ ๋น„์Šทํ•œ ํผ์„ ๊ฐ€์ง€๋Š” UI๋˜๋Š” ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๋Š” ํ•จ์ˆ˜๋“ค์„ ๊ณต์šฉ์œผ๋กœ ๋”ฐ๋กœ ์ž‘์—…์„ ํ•ด์„œ ํ•œ ๊ณณ์—์„œ ์œ ์ง€ ๋ณด์ˆ˜ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—…ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

SSOT(Single Source of Truth)

SSOT(Single Source of Truth)๋Š” ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ด ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋ชจํ˜ธํ•˜์ง€ ์•Š์€ ๋‹จ์ผ ํ‘œํ˜„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์›์น™์ด๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์•™ ์œ„์น˜์— ์ €์žฅ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ด ๋ฐ์ดํ„ฐ๋Š” ํ•ด๋‹น ํŠน์ • ์ •๋ณด์— ๋Œ€ํ•œ ์œ ์ผํ•œ ์ •๋ณด ์†Œ์Šค์—ฌ์•ผ ํ•œ๋‹ค.

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

๊ฐœ๋ฐœ์ž๋Š” SSOT ์›์น™์— ๋”ฐ๋ผ ์ „์ฒด ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ๊ด€๋˜๊ณ  ์ตœ์‹  ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•˜์—ฌ ๋ฒ„๊ทธ์™€ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹œ์Šคํ…œ ์ „์ฒด์— ๋ณต์ œํ•˜๋Š” ๋Œ€์‹  ํ•œ ๊ณณ์—์„œ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

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

useState

React์—์„œ useState๋Š” ๊ธฐ๋Šฅ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ƒํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” hook์ด๋‹ค. ์ด์ „์—๋Š” setState๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๊ตฌ์„ฑ ์š”์†Œ์—์„œ๋งŒ ๊ฐ€๋Šฅํ–ˆ์—ˆ๋Š”๋ฐ ์š”์ฆ˜์€ ๊ธฐ๋Šฅ์  ๊ตฌ์„ฑ ์š”์†Œ(Functional components)์—์„œ ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

useState hook์€ ์ดˆ๊ธฐ ์ƒํƒœ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ํ˜„์žฌ ์ƒํƒœ ๊ฐ’๊ณผ ํ•ด๋‹น ์ƒํƒœ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์˜ ๋‘ ๊ฐ€์ง€ ๊ฐ’์ด ํฌํ•จ๋œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

const [temporary, setTemporary] = useState();

๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ ํ˜„์žฌ ์ƒํƒœ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ Œ๋”๋ง ๋ฉ”์„œ๋“œ์—์„œ ์•ก์„ธ์Šคํ•˜๊ณ  ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ฐ’์€ ์ƒํƒœ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋กœ, ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋„๋ก ํ•œ๋‹ค.

1๊ธ‰ ๊ฐ์ฒด(first-class object)๋ž€?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์„ค๊ณ„์—์„œ ์ผ๊ธ‰ ๊ฐ์ฒด(๋˜๋Š” ์ผ๊ธ‰ ์‹œ๋ฏผ)๋Š” ๊ฐ’ ๋˜๋Š” ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋˜์–ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๋˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜์— ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ผ๊ธ‰ ๊ฐ์ฒด๋Š” ์–ธ์–ด์˜ ๋‹ค๋ฅธ ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ๋‹ค.

JavaScript ๋ฐ Python๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์—์„œ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ‘œํ˜„๋ ฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

JavaScript์—์„œ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผ๋˜๋Š”๋ฐ ์ฆ‰, ์–ธ์–ด์˜ ๋‹ค๋ฅธ ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋” ํฐ ์œ ์—ฐ์„ฑ๊ณผ ํ‘œํ˜„๋ ฅ์„ ํ—ˆ์šฉํ•œ๋‹ค.

๋‹ค์Œ์€ JavaScript์—์„œ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ผ๊ธ‰ ๊ฐ์ฒด์ธ์ง€์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ

  1. ๋ณ€์ˆ˜์— ๊ธฐ๋Šฅ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

const myFunc = function() {
  console.log("Hello world!");
};
  1. ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋‹ค.

function greet(name, greetingFunc) {
  console.log(greetingFunc(name));
}

function sayHello(name) {
  return "Hello " + name + "!";
}

greet("Alice", sayHello); // outputs "Hello Alice!"
  1. ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ๋‹ค.

function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}

const add5 = makeAdder(5);
console.log(add5(3)); // outputs 8

์œ„ ์˜ˆ์ œ์—์„œ ํ•จ์ˆ˜๋Š” ์–ธ์–ด์˜ ๋‹ค๋ฅธ ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์กฐ์ž‘๋  ์ˆ˜ ์žˆ๋‹ค.

Lifting State Up

์ƒํƒœ ์˜ฌ๋ฆฌ๊ธฐ(Lifting State Up)๋Š” ํ•˜์œ„ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒํƒœ๋ฅผ ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋™ํ•˜๋Š” React์˜ ๊ธฐ์ˆ ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํ•˜์œ„ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ค‘์•™ ์œ„์น˜์—์„œ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

function ParentComponent() {
  const [count, setCount] = useState(0);

  function incrementCount() {
    setCount(count + 1);
  }

  return (
    <div>
      <ChildComponent count={count} incrementCount={incrementCount} />
      <AnotherChildComponent count={count} />
    </div>
  );
}

function ChildComponent(props) {
  return (
    <div>
      <p>Count: {props.count}</p>
      <button onClick={props.incrementCount}>Increment</button>
    </div>
  );
}

function AnotherChildComponent(props) {
  return <p>Count: {props.count}</p>;
}

์œ„ ์˜ˆ์ œ์—์„œ count ์ƒํƒœ๋Š” ParentComponent์— ์ €์žฅ๋˜๊ณ  ChildComponent ๋ฐ AnotherChildComponent์— ์†Œํ’ˆ(props)์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค. incrementCount ํ•จ์ˆ˜๋„ ChildComponent์— ์†Œํ’ˆ(props)์œผ๋กœ ์ „๋‹ฌ๋˜์–ด ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

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

Last updated