[TIL] 240520 (React ์ˆ™๋ จ)

์†”ยท2024๋…„ 5์›” 20์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
47/268
post-thumbnail

๐Ÿฅž ์˜ค๋Š˜ ํ•œ ์ผ

  • ๋ฆฌ์•กํŠธ ์ˆ™๋ จ ๊ฐ•์˜
    • 1-1~7 ์ˆ˜๊ฐ• ์™„๋ฃŒ
  • ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์ˆ˜์—…
    • ๋ฆฌ์•กํŠธ ์ž…๋ฌธ ํƒ€์ž„์–ดํƒ
      • ๋”ํ•˜๊ธฐ/๋นผ๊ธฐ ๊ณ„์‚ฐ๊ธฐ
      • ํˆฌ๋‘๋ฆฌ์ŠคํŠธ
    • 3์ฐจ์‹œ ๊ณผ์ œ ์™„๋ฃŒ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์นดํƒ€
    • ์‹ฌํ™”๋ฐ˜ ์ฒซ ์ˆ˜์—… ์ˆ˜๊ฐ•
    • ํƒํ—˜๋ฐ˜ ๋ฌธ์ œ ํ’€์ด
      • ๋ฌธ์ž์—ด ๋‚ด ๊ฐ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
      • ๋ฌธ์ž์—ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž ์ฐพ๊ธฐ
      • ๋‘ ๋ฌธ์ž์—ด์˜ ๊ต์ง‘ํ•ฉ ๋ฌธ์ž ์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ
      • ๋‘ ๋‹จ์–ด๊ฐ€ ์• ๋„ˆ๊ทธ๋žจ์ธ์ง€ ํ™•์ธ

๐Ÿฝ๏ธ ๋ฌธ์ œ ํ•ด๊ฒฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์นดํƒ€

๋ฌธ์ž์—ด ๋‚ด ๊ฐ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๊ฐ ๋ฌธ์ž๊ฐ€ ๋ช‡ ๋ฒˆ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์„ธ์–ด๋ผ. ๊ฒฐ๊ณผ๋Š” ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

function countCharacters(s) {
  let result = {};
  [...s].forEach((item) => {
    if (!result[item]) result[item] = 1;
    else result[item] += 1;
  });
  return result;
}

๊ฒฐ๊ณผ๋ฅผ ๋‹ด์„ ๊ฐ์ฒด result๋ฅผ ๋งŒ๋“ ๋‹ค.
๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ s๋ฅผ forEach๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณตํ•œ๋‹ค.
๋ฌธ์ž์—ด์— ํ•ด๋‹นํ•˜๋Š” key๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  value๋กœ 1์„ ์ง€์ •ํ•œ๋‹ค.
์ด๋ฏธ ๋ฌธ์ž์—ด์— ํ•ด๋‹นํ•˜๋Š” key๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ value์— 1์„ ๋”ํ•ด์ค€๋‹ค.
result๋ฅผ return ํ•œ๋‹ค.

๋ฌธ์ž์—ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž ์ฐพ๊ธฐ

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๊ทธ ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•˜๋ผ.

function mostFrequentChar(s) {
  let str = "";
  for (let i = 0; i < s.length; i++) {
    if (!str.includes(s[i])) str += s[i];
    else return s[i];
  }
}

๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋นˆ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜ str์„ ์„ ์–ธํ•œ๋‹ค.
s๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ•œ ๋ฌธ์ž์”ฉ ๋ฐ˜๋ณตํ•œ๋‹ค.
๋งŒ์•ฝ str ๋‚ด์— i๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์—†๋‹ค๋ฉด str์— ๋„ฃ์–ด์ค€๋‹ค.
str ๋‚ด์— i๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์— i๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ๋ฐ”๋กœ return ํ•ด์ค€๋‹ค.

๋‘ ๋ฌธ์ž์—ด์˜ ๊ต์ง‘ํ•ฉ ๋ฌธ์ž ์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ

๋‘ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‘ ๋ฌธ์ž์—ด์— ๋ชจ๋‘ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ง‘ํ•ฉ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ผ.

function commonCharacters(s1, s2) {
  const arr = [];
  for (let i = 0; i < s1.length; i++) {
    if (s2.includes(s1[i])) {
      arr.push(s1[i]);
    }
  }
  return new Set(arr);
}

๊ต์ง‘ํ•ฉ ๋ฌธ์ž๋ฅผ ๋„ฃ์„ ๋นˆ ๋ฐฐ์—ด arr์„ ์„ ์–ธํ•œ๋‹ค.
s1์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ ค i๋ฒˆ์งธ ์š”์†Œ๊ฐ€ s2์— ์žˆ์„ ๊ฒฝ์šฐ ๊ต์ง‘ํ•ฉ ๋ฌธ์ž์ด๋ฏ€๋กœ arr์— pushํ•œ๋‹ค.
arr์— ๊ฒน์น˜๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ๋ฌธ์ž๋“ค์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” new Set ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด return ํ•œ๋‹ค.

๋‘ ๋‹จ์–ด๊ฐ€ ์• ๋„ˆ๊ทธ๋žจ์ธ์ง€ ํ™•์ธ

๋‘ ๋‹จ์–ด A์™€ B๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, A์˜ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์–ด B๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ผ. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด true, ์•„๋‹ˆ๋ผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.

function isAnagram(a, b) {
  const sortA = a.split("").sort();
  const sortB = b.split("").sort();
  for (let i = 0; i < sortA.length; i++) {
    if (sortA[i] !== sortB[i]) {
      return false;
    }
  }
  return true;
}

๋‘ ๋‹จ์–ด๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์‰ฝ๋„๋ก ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ๊ฐ ๋‹จ์–ด๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด sort() ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•œ๋‹ค.
์ด ๊ฒฝ์šฐ ํ•œ ๋‹จ์–ด๊ฐ€ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์–ด ๋‹ค๋ฅธ ๋‹จ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฐฐ์—ด์˜ ์š”์†Œ์™€ ์ˆœ์„œ๊ฐ€ ์ „๋ถ€ ๊ฐ™๋‹ค๋Š” ์ ์„ ์ด์šฉํ–ˆ๋‹ค.
๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด sort()๊ฐ€ ์ ์šฉ๋œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋ฐ”๋กœ false๋ฅผ returnํ•œ๋‹ค.
false ์—†์ด ๋ฐ˜๋ณต๋ฌธ์„ ์ „๋ถ€ ๋Œ์•˜๋‹ค๋ฉด ๋‘ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๊ฐ™๋‹ค๋Š” ๋ง์ด๊ธฐ ๋•Œ๋ฌธ์— true๋ฅผ returnํ•œ๋‹ค.

์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์ˆ˜์—…

๋ฆฌ์•กํŠธ ์ž…๋ฌธ ํƒ€์ž„์–ดํƒ

์˜ค๋Š˜์€ ํƒ€์ž„์–ดํƒ์ด ์žˆ์—ˆ๋‹ค. ๊ธฐ์กด ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๋งŒ ํƒ€์ž„์–ดํƒ์ด ์žˆ๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ, ๋”ํ•˜๊ธฐ/๋นผ๊ธฐ ๊ณ„์‚ฐ๊ธฐ ํƒ€์ž„์–ดํƒ๋„ ์ถ”๊ฐ€๋˜์–ด, ๊ณ„์‚ฐ๊ธฐ์— 20๋ถ„, ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ์— 40๋ถ„์œผ๋กœ ์ด 1์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€๋Š” ํƒ€์ž„์–ดํƒ์ด์—ˆ๋‹ค.
ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ๊ฐ™์€ ๊ฒฝ์šฐ ๋ณ„ ์–ด๋ ค์›€ ์—†์ด ์—ฐ์Šตํ•œ๋Œ€๋กœ ์ž˜ ํ•ด๋ƒˆ๊ณ , ์˜ˆ๊ณ ๋˜์ง€ ์•Š์•„ ๊ฑฑ์ •ํ–ˆ๋˜ ๊ณ„์‚ฐ๊ธฐ๋„ ํฐ ์–ด๋ ค์›€ ์—†์ด ํ•ด๋ƒˆ๋‹ค. ์•„๋ž˜๋Š” ๊ณ„์‚ฐ๊ธฐ ์ฝ”๋“œ์ด๋‹ค.

export default function App() {
  const [value, setValue] = useState("");
  const [count, setCount] = useState(0);
  return (
    <div>
      <h1>๋ง์…ˆ๊ณผ ๋บ„์…ˆ์ด ๊ฐ€๋Šฅํ•œ ์•ฑ ๋งŒ๋“ค๊ธฐ</h1>
      <div>
        <input
          type="number"
          value={value}
          onChange={(e) => {
            setValue(e.target.value);
          }}
        />{" "}
        ๋งŒํผ์„{" "}
        <button
          onClick={() => {
            setCount(count + +value);
          }}
        >
          ๋”ํ• ๊ฒŒ์š”
        </button>{" "}
        <button
          onClick={() => {
            setCount(count - +value);
          }}
        >
          ๋บ„๊ฒŒ์š”
        </button>
        <button
          onClick={() => {
            setCount(0);
          }}
        >
          ์ดˆ๊ธฐํ™”
        </button>
      </div>
      <hr />
      <div>
        <h3>๊ฒฐ๊ณผ</h3>
        <p>{count}</p>
      </div>
    </div>
  );
}

๐Ÿช ๋ฐฐ์šด ๊ฒƒ

๋ฆฌ์•กํŠธ ์ˆ™๋ จ ๊ฐ•์˜

  • styled-components
  • reset css
  • useState
  • useRef
  • useContext
  • memoization - memo, useCallback

๐Ÿด ๋Œ์•„๋ณด๊ธฐ

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์นดํƒ€ ์‹ฌํ™”๋ฐ˜ ์ˆ˜์—…์„ ๋“ค์—ˆ์œผ๋‚˜, ๊ฐœ์ธ์ ์œผ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์ด ์•„๋‹Œ๋“ฏํ•œ ๋А๋‚Œ์ด ๋“ค์–ด ํƒํ—˜๋ฐ˜์œผ๋กœ ํ‹€์—ˆ๋‹ค! (๋ฐ˜ ์ด๋™์ด ์ž์œ ๋กญ๋‹ค๊ณ  ํ•˜์…จ๊ธฐ๋„ ํ•˜๊ณ , ์•„์ง ๊ทน์ดˆ๋ฐ˜์ด๊ธฐ์—) ๋‚ด ํ•„์š”์„ฑ์— ๋งž๊ฒŒ ์ž˜ ์„ ํƒํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
  • ๋ฆฌ์•กํŠธ ์ˆ™๋ จ ์ฃผ์ฐจ๊ฐ€ ๋˜๊ณ  ๊ฐ‘์ž๊ธฐ ์ด๊ฒƒ์ €๊ฒƒ ํœ˜๋ชฐ์•„์น˜๋ฉด์„œ ํ•  ๊ฒŒ ๋งŽ์•„์กŒ๋‹ค. ๋‚˜์—๊ฒŒ๋Š” ์ด๋ฒˆ ์ˆ™๋ จ ์ฃผ์ฐจ์—์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋” ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋” ์‹œ๊ฐ„์„ ์•Œ์ฐจ๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ํž˜์„ ๋‚ด์„œ ๋‹ฌ๋ ค๋ณด์ž!

๐Ÿณ ๋‚ด์ผ ํ•  ์ผ

  • ๋ฆฌ์•กํŠธ ์ˆ™๋ จ ๊ฐ•์˜ ์™„๊ฐ•
  • ๋ฆฌ์•กํŠธ ์ˆ™๋ จ ๊ณผ์ œ ์‹œ์ž‘
profile
์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€