[React] ๋ฆฌ์•กํŠธ

๐Ÿ“„ ๋ฆฌ์•กํŠธ(React)

๋ฆฌ์•กํŠธ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.์ž…๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ๋Š” 2013๋…„ ํŽ˜์ด์Šค๋ถ์—์„œ ์‹œ์ž‘๋˜์–ด ํ˜„์žฌ ๋งŽ์€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ง‘ํ•ฉ์ฒด๋กœ์„œ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“„ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ

import React, { Component } from 'react';

/* component */
class LikeButton extends Component {
  /* state */
  state = {
    numnerOfLikes: 0,
  };
  /* render */
  render() {
    return <button>
      {this.state.numberOfLikes}
    </button>;
  }
}

export defalut LikeButton;
  • state: ์ปดํฌ๋„ŒํŠธ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ
  • render: ์‚ฌ์šฉ์ž์— ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ ๋ ์ง€ ํ‘œํ˜„

๋ฆฌ์•กํŠธ๋Š” ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ์˜ ํ˜•์‹์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ state๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด render์— ์ ์šฉ๋˜์–ด ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋‚ด์šฉ์ด ๋ฐ”๋€๋‹ˆ๋‹ค.

๋งŒ์•ฝ renderํ•จ์ˆ˜ ์•ˆ์— ์ž์‹์š”์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค๋ฉด ์ž์‹์š”์†Œ์˜ renderํ•จ์ˆ˜๊ฐ€ ๋ชจ๋‘ ์—…๋ฐ์ดํŠธ ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ณ€๊ฒฝ ์š”์†Œ๋“ค์ด DOM Tree์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ์˜ Virtual Dom Tree๋Š” ์ด์ „ ํŠธ๋ฆฌ์™€ ๋น„๊ตํ•ด ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ๋งŒ ๊ตฌ๋ณ„ํ•˜์—ฌ Dom Tree์— ์ ์šฉ์‹œํ‚ต๋‹ˆ๋‹ค.

๐Ÿ“„ ๋ฆฌ์•กํŠธ์˜ ์žฅ์ 

  • ๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‹ค.

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

  • ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์€ ๋ฆฌ์•กํŠธ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ์ด ๋  ๋•Œ ๋งˆ๋‹ค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค๋ฅธ ์š”์†Œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ผ์ผํžˆ ์†๋Œˆ ํ•„์š” ์—†์ด ๋ฆฌ์•กํŠธ ์ž์ฒด์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ์„ ์ถ”๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฆฌ์•กํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 60fps๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๋ณด์žฅ๋œ๋‹ค.

๐Ÿ“„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

  1. ํด๋ž˜์Šค

    • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์†ํ•ด์„œ ๋งŒ๋“ ๋‹ค.
    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ, ํ•จ์ˆ˜๊ฐ€ ๋ฌถ์–ด์ ธ ์žˆ๋‹ค.
    • state๊ฐ€ ๋“ค์–ด์žˆ์–ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด Renderํ•จ์ˆ˜๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.
    class LikeButton extends Component {...}
    
  2. ํ•จ์ˆ˜

    • ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†๊ณ  ์ •์ ์ธ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.
    • ํ•œ๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ์œ„์ด๋ฉฐ, state๋‚˜ lifecycle method๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ React 16.8 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” React Hook์ด ๋„์ž…๋˜์–ด state, lifecycle method๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
function App() {
  return <h1>Hello</h1>;
}

์ถœ์ฒ˜

  • ๋“œ๋ฆผ์ฝ”๋”ฉ

  • ์ƒํ™œ์ฝ”๋”ฉ

Leave a comment