IT Dictionary

๋ฆฌ์—‘ํŠธ(React) ์„ค๋ช…

Jaebins 2023. 5. 2. 12:31
๋ฐ˜์‘ํ˜•

๐Ÿ’ค ๋ฆฌ์—‘ํŠธ(React)

๊ตฌ Facebook, ํ˜„ Meta์—์„œ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JS) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ํด๋ผ์ด์–ธํŠธ์—์„œ ๋™์ ์œผ๋กœ ์›น์„ ๊ตฌ์ถ•ํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ๋งค์ผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๊ตฌ๋™ํ•˜๋Š” ๊ธฐ์กด ์›นํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋ž‘ ์ฐจ์ด์ ์„ ๋‘”  SPA(Single Page Application)๋ฅผ ์ด์šฉํ•œ๋‹ค. 

 

 

๊ธฐ์กด ์›นํŽ˜์ด์ง€ ๋™์ž‘ ๋ฐฉ์‹์€ DOM์„ ์ง์ ‘์ ์œผ๋กœ ์กฐ์ž‘ํ•˜์—ฌ ๋ Œ๋”๋ง์„ ๋ฐฉ์‹์„ ์ฑ„์šฉํ•˜์ง€๋งŒ, ๋ฆฌ์—‘ํŠธ๋Š” Virtual Dom ์„ ์ด์šฉํ•ด ์›นํŽ˜์ด์ง€์—์„œ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ Virtual Dom๊ณผ ๊ธฐ์กด Dom์„ ๋งค์นญ์‹œ์ผœ์„œ ๋ณ€๊ฒฝ์ด ์žˆ๋Š” ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •์„ ํ•ด์ค€๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์ธ ๋ณ€ํ™”๊ฐ€ ๋งŽ์€ ์›น์ผ์ˆ˜๋ก ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์—‘ํŠธ์ง€๋งŒ, ๋น„๊ต์  ๋ณ€ํ™”๊ฐ€ ์ ์€ ์ •์ ์ธ ์›น์€ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜๋„ ์žˆ๋Š” ์–‘๋‚ ์˜ ์นผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

๋˜ํ•œ props ๋ผ๋Š” ๊ฒƒ์„ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฒด๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด props๋Š” ๋ถˆ๋ณ€์˜ ๊ฐ’์œผ๋กœ ์กด์žฌํ•˜๋ฉฐ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

import React from 'react';
import ReactDOM from 'react-dom';

function App (props){
  return (
    <h1>Hello, {props.name}!</h1> // props๋กœ name์„ ์ˆ˜์‹ 
  )
}

const root = ReactDOM.createRoot(
  document.getElementById('root')
);

root.render(<App name="World" />); // props๋กœ name์„ ์ „๋‹ฌ
๋ชจ๋“  ์•จ๋ฆฌ๋จผํŠธ๋Š” React Dom์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ Root DOM Node ๋ถˆ๋ฆฌ๋Š”๋ฐ, createRoot๋ฅผ ํ†ตํ•ด DOM node๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , App์ด๋ผ๋Š” Element๋ฅผ render๋ฅผ ํ†ตํ•ด ๋กœ๋“œํ•˜๊ฒŒ ๋œ๋‹ค.

 

๐Ÿ’ค JSX(JavaScript Xml)

๋ฆฌ์—‘ํŠธ๋Š” JSX(JavaScript Xml) ์„ ์ด์šฉํ•˜์—ฌ HTML์„ ํ‘œํ˜„ํ•œ๋‹ค. JSX๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ HTML๋กœ ํ‘œ์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTML์— ๊ธฐ๋ฐ˜์„ ๋‘”๊ฑฐ ๊ฐ™์ง€๋งŒ, ์‚ฌ์‹ค์€ XML์„ ๋ฐ”ํƒ•์œผ๋กœ ์ œ์ž‘๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— HTML์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๊ธด ํ•˜์ง€๋งŒ, ์™„์ „ํ•œ HTML์€ ์•„๋‹Œ ๊ฒƒ์ด๋‹ค. ๋ฆฌ์—‘ํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ผญ JSX๋กœ ์ž‘์„ฑํ•  ํ•„์š”๋Š” ์—†๊ธด ํ•˜์ง€๋งŒ, JS ์ฝ”๋“œ์•ˆ์—์„œ ์š”์†Œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์ ์œผ๋กœ ์ข‹๊ฒŒ ๋น„์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฆฌ์—‘ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ JSX๋ฅผ ์• ์šฉํ•œ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ HTML๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด์„œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹ถ์„๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•œ๋‹ค.

<div class="Hello">

</div>

๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ์—‘ํŠธ์—์„œ๋Š” ํด๋ž˜์Šค ์ •์˜๋ฅผ  ํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ์— ์ ์šฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

function App(){
	return(
        <div className="Hello">

        </div>
	}
}

์—ฌ๊ธฐ์„œ ๋ˆˆ์— ๋„๋Š” ์ฐจ์ด๋Š” App ์ด๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ Hello ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๋“ฏ JSX๋Š” div์™€ ๊ฐ™์ด ์š”์†Œ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ  ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š JSX ์ฝ”๋“œ๋“ค์€ Babel ์ด๋ผ๋Š” ์ปดํŒŒ์ผ์„ ์ด์šฉํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” JS ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.

class? className?
์œ„์—์„œ ๋งํ–ˆ๋“ฏ, JSX๋Š” HTML์— ์™„์ „ํžˆ ๊ธฐ๋ฐ˜์„ ๋‘” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์†์„ฑ์ด๊ธด ํ•˜์ง€๋งŒ, ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฅธ ๊ฒƒ์ด๋‹ค.

 

๋ฐ˜์‘ํ˜•