Props

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • Props

    • ์ˆœ์ˆ˜ ํ•จ์ˆ˜

    • ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น Distructuring

    • Prop Drilling

Props

๐Ÿ“– Props๋ž€?

  • Properties์˜ ์ค„์ž„๋ง

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฐ์ฒด

  • ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๊ฐ’(= Data)์„ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ด๋‹ค.

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌํ•˜๋Š” props ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋Š” props ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ชจ๋“  React ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ props๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ฐ˜๋“œ์‹œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. by.React ๊ณต์‹๋ฌธ์„œ

์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ž€?

  • ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์“ฐ์ด๋Š” ๊ฐœ๋…์ด๋‹ค.

  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค์ด ์™ธ๋ถ€์˜ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์–ด๋– ํ•œ Input์„ ์ „๋‹ฌํ•ด๋„ ๋˜‘๊ฐ™์€ ์ƒํƒœ(ํƒ€์ž…)๋กœ output์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜ โ‡’ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ์ถœ๋ ฅ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ์™ธ๋ถ€์ƒํƒœ์— ์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

// ์ˆœ์ˆ˜ ํ•จ์ˆ˜ ์˜ˆ์‹œ 
function add(a, b) {
  return a + b;
}
//  ์ˆœ์ˆ˜ ํ•จ์ˆ˜ ์•„๋‹Œ ์˜ˆ์‹œ
function withdraw(a, b){
  a.num -= b;
  // ์ž…๋ ฅ ๋ฐ›์€ ์ธ์ž์— ๋Œ€์ž…์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์ด ๋ณ€๊ฒฝ ๋˜์—ˆ๋‹ค.
}

๐Ÿค– ๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ props๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ•ด์•ผ ํ• ๊นŒ?

  • ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ ๋™์ผํ•œ props๋ฅผ ์ „๋‹ฌ ํ–ˆ์„ ๋•Œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ๋ณด์žฅ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ์ž…๋ ฅํ•œ ๊ฐ’์— ๋”ฐ๋ผ ํ•ญ์ƒ ๋™์ผํ•œ ์ถœ๋ ฅ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ์— Unit Test(๋‹จ์œ„ ํ…Œ์ŠคํŠธ)ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค.

  • ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ ๋ฐ›์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋ฏ€๋กœ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†๋‹ค. props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ Œ๋”๋ง์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ถ€์ž‘์šฉ์ด ์—†๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜๋Š” ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค.

โ‡’ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑ๋˜๋ฉด, ์ƒํƒœ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์‰ฝ๊ณ , ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

๐Ÿค– React๋Š” Props๋ฅผ Date Destructuring์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค

// ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ 
const App = () => {
  return (
    <>
      <PropsNotSeparated name="ํ™๊ธธ๋™" age={30} />
      <PropsSeparated name="ํ™๊ธธ๋™" age={30} />
    </>
  );
};

// ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ 
function PropsNotSeparated(props){
  return (
    <p>{props.name}</p>
    <p>{props.age}</p>
  );
}

function PropsSeparated({name,age}){
  return (
    <p>{name}</p>
    <p>{age}</p>
  );
}
  • Data destructuring(๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น)์„ ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›์€ props์˜ ๋‚ด์šฉ๋“ค์„ ์ง๊ด€์ ์ด๊ณ  ๊ฐ€๋…์„ฑ ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ props๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š” ๊ฒฝ์šฐ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿค” Prop Drilling ์ด๋ž€?

Props๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์ „๋‹ฌ ๋ฐ›์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” props ๊ฐ’์„ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†๊ธฐ์— ๋ฐ์ดํ„ฐ๋Š” ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. Prop Driling์€ Props๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ์—๋„ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด props๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.

Prop Drilling ๋ฌธ์ œ์ 

์ปดํฌ๋„ŒํŠธ์˜ ๊ณ„์ธต๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๋งŽ์•„์ง€๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ props๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ ๋ฐ›๊ฒŒ ๋œ๋‹ค๋ฉด ๋น„ํšจ์œจ์ ์ธ ํ˜„์ƒ๋“ค์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  • ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š๋Š” props ์ „๋‹ฌ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง

  • props์˜ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ ๋œ๋‹ค๋ฉด

Prop Drilling ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

    • redux, Mobx, recoil ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์ด ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์— ์ง์ ‘ ๋ถˆ๋Ÿฌ์„œ ์‚ฌ์šฉ

  • Children์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ

โœ๐Ÿป Props ์ •๋ฆฌ

  • ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๊ฐ’์„(๋ฐ์ดํ„ฐ)๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ด๋‹ค.

  • ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ props ๊ฐ’์„ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ํ†ตํ•ด props ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ props๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์ „๋‹ฌ ๋ฐ›์€ props ๊ฐ’์„ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์—†์–ด ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„์„ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ, ์ปดํฌ๋„ŒํŠธ์˜ ๊ณ„์ธต๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๋งŽ์•„์ง€๊ฒŒ ๋œ๋‹ค๋ฉด props๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ๊ณผ์ •์—์„œ ๋น„ํšจ์œจ์ ์ธ ํ˜„์ƒ๋“ค์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. Prop Drilling

๐Ÿ”— ์ฐธ๊ณ 

Last updated