| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- textshadow
- ํ์ ์ ๋ ํฐ
- ์ฃผ์
- ์ถ์ฝ
- wordspacing
- selectorslevel4
- ๋นํ๊ทธ
- ์ ๋๋ฒ์ ์ ๋ ํฐ
- liststyletype
- borderspacing
- ํด๋์ค์ ๋ ํฐ
- inlineblock
- liststyleimage
- CDN
- texttransform
- ํผํ๊ทธ
- gtammertable
- borderstyle
- textdecoration
- ํฐํธ์จ์ดํธ
- ๊ทธ๋ฃน์ ๋ ํฐ
- liststyleposition
- bordercollapse
- ์์ด๋์ ๋ ํฐ
- ๋ชจ๋์นํฐํธ
- captionside
- fontweight
- ํฅ์ค์ฝ๋
- formtag
- ๊ตฌ๊ธํฐํธ
- Today
- Total
็ก์
React (๋ฆฌ์กํธ) ๋ณธ๋ฌธ

๐ถ React ๐ถ
์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
Meta(๊ตฌ Facebook)์์ ๊ฐ๋ฐํ์ผ๋ฉฐ, ์ปดํฌ๋ํธ(Component) ๊ธฐ๋ฐ์ผ๋ก UI๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์๋ค.
โผ๏ธ ์ฃผ์ ํน์ง
- ๋์ ์ฑ๋ฅ: Virtual DOM์ ํ์ฉํ์ฌ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ๋ฏ๋ก ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ์ ๊ณตํ๋ค.
- ๋ถํ์ํ ํ๋ฉด ๊ฐฑ์ ์ ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
- ์ฌ์ฌ์ฉ์ฑ: ์ปดํฌ๋ํธ(Component) ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ UI ์์๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
- ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
- ์ปค๋ฎค๋ํฐ ์ง์: ์ ์ธ๊ณ์ ์ผ๋ก ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๊ณ ์์ด ๋ค์ํ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐธ๊ณ ์๋ฃ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
- ๋ฌธ์ ํด๊ฒฐ์ ํ์ํ ์ ๋ณด์ ์ง์์ ๋น ๋ฅด๊ฒ ์ป์ ์ ์๋ค.
- ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ ์ง์: React Native๋ฅผ ์ฌ์ฉํ๋ฉด React์ ์ปดํฌ๋ํธ์ ์ํ ๊ด๋ฆฌ ๋ฐฉ์์ ํ์ฉํ์ฌ Android์ iOS ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ์ ์๋ค.
- ์น๊ณผ ๋ชจ๋ฐ์ผ ๊ฐ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ฌ ๊ฐ๋ฐ ํจ์จ์ ๋์ผ ์ ์๋ค.
๐ React๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ์ Virtual DOM์ ํตํด ํจ์จ์ ์ธ UI ๊ฐ๋ฐ์ ์ง์ํ๋ค. ํนํ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA) ๊ฐ๋ฐ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ๋ถํ ์ํ๊ณ ๋๋ถ์ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ ์ ํฉํ๋ค.
โผ๏ธ ํ์ ๋งค๋ด์ผ ๋ชจ์
๐น Component (์ปดํฌ๋ํธ)
React์ ํ๋ฉด(UI)์ ๋ง๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ๋ฆฝ์ ์ธ ๋จ์.
function MyComponent() {
return <h1>Hello, React!</h1>;
}
- ํ๋์ ๊ธฐ๋ฅ์ด๋ ํ๋ฉด์ ํ๋์ ์ปดํฌ๋ํธ๋ก ์์ฑํ๋ค.
- ํ๋ React์์๋ ํจ์ํ ์ปดํฌ๋ํธ(Function Component)๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๐น JSX (JavaScript XML)
JavaScript ์์์ HTML์ฒ๋ผ UI๋ฅผ ์์ฑํ ์ ์๋ ๋ฌธ๋ฒ.
const element = <h1>Hello, JSX!</h1>;
- HTML์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ HTML์ ์๋๋ค.
- JSX๋ JavaScript ๋ฌธ๋ฒ ํ์ฅ(Syntax Extension)์ด๋ฉฐ, ๋น๋ ๊ณผ์ ์์ JavaScript ์ฝ๋๋ก ๋ณํ๋๋ค.
- UI ๊ตฌ์กฐ๋ฅผ ์ง๊ด์ ์ผ๋ก ํํํ ์ ์๋ค.
๐น Props (Properties)
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ.
// ๋ถ๋ชจ ์ปดํฌ๋ํธ
<Greeting name="World" />
// ์์ ์ปดํฌ๋ํธ
function Greeting(props) {
return <p>Hello, {props.name}!</p>;
}
- ๋ถ๋ชจ → ์์ ๋ฐฉํฅ์ผ๋ก๋ง ์ ๋ฌ๋๋ค. (๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ)
- Props๋ ์ฝ๊ธฐ ์ ์ฉ(Read-only)์ด๋ฏ๋ก ์์ ์ปดํฌ๋ํธ์์ ์ง์ ๋ณ๊ฒฝํ ์ ์๋ค.
๐น useState
์ปดํฌ๋ํธ์ ์ํ(State)๋ฅผ ์ ์ฅํ๊ณ ๋ณ๊ฒฝํ๊ธฐ ์ํ Hook.
import { useState } from "react";
function Counter() {
const [count, setCount] = useState(0); // count → ํ์ฌ ๊ฐ, setCount() → ๊ฐ์ ๋ณ๊ฒฝํ๋ ํจ์, 0 → ์ด๊ธฐ๊ฐ
return (
<>
<p>{count}</p>
<button onClick={() => setCount(count + 1)}>
์ฆ๊ฐ
</button>
</>
);
}
- ์นด์ดํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ๊ฐ ๋๋ ๋ชฉ๋ก์ ํญ๋ชฉ ๋ฑ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- State๊ฐ ๋ณ๊ฒฝ๋๋ฉด React๊ฐ ์๋์ผ๋ก ํ๋ฉด์ ๋ค์ ๋ ๋๋ง(Re-rendering)ํ๋ค.
๐น useEffect
๋ ๋๋ง ์ดํ ๋ถ์ ํจ๊ณผ(Side Effect)๋ฅผ ์ฒ๋ฆฌํ๋ Hook.
import { useState, useEffect } from "react";
function DataFetcher() {
const [data, setData] = useState(null);
useEffect(() => {
// ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ(๋ ๋๋ง)๋ ํ ํ ๋ฒ๋ง ์คํ๋ฉ๋๋ค.
fetch('https://api.example.com/data')
.then(response => response.json())
.then(result => setData(result));
}, []); // ์์กด์ฑ ๋ฐฐ์ด์ด ๋น์ด์์ผ๋ฉด ์ต์ด 1ํ๋ง ์คํ, ๊ฐ์ด ์์ผ๋ฉด ๊ทธ ๊ฐ์ด ๋ณํ ๋๋ง๋ค ์ฌ์คํ
return (
<div>
{data ? <p>๋ฐ์ดํฐ: {data.message}</p> : <p>๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ์ค์
๋๋ค...</p>}
</div>
);
}
- API ์์ฒญ, ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ, ์ด๋ฒคํธ ๋ฑ๋ก, ํ์ด๋จธ ์คํ, DOM ์กฐ์ ๋ฑ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํจ๊ณผ์ ์ด๋ค.
๐น Conditional Rendering (์กฐ๊ฑด๋ถ ๋ ๋๋ง)
ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ.
function UserStatus({ isLoggedIn }) {
return (
<>
{isLoggedIn ? <p>ํ์ํฉ๋๋ค!</p> : <p>๋ก๊ทธ์ธํด์ฃผ์ธ์.</p>}
</>
);
}
- ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ผํญ ์ฐ์ฐ์: ์กฐ๊ฑด ? ์ฐธ์ผ ๋ : ๊ฑฐ์ง์ผ ๋
- if๋ฌธ: if (isLoggedIn) { return <Home />; } return <Login />;
- && ์ฐ์ฐ์: {isLoggedIn && <Home />} (์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง ์ฐํญ์ ๋ ๋๋ง)
๐น map()
๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํด์ ํ๋ฉด์ ์ถ๋ ฅํ ๋ ์ฌ์ฉ.
function ItemList({ items }) {
return (
<ul>
{items.map(item => (
<li key={item.id}>
{item.name}
</li>
))}
</ul>
);
}
- ๊ฐ ์์๋ง๋ค ๊ณ ์ ํ key๊ฐ ๋ฐ๋์ ํ์ํ๋ค. (React๊ฐ ๋ณ๊ฒฝ๋ ์์๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์งํ๊ธฐ ์ํจ)
- key๋ ๊ฐ๋ฅํ ํ ๋ฐ์ดํฐ์ ๊ณ ์ ID๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ๋ฐฐ์ด์ index๋ ์์๊ฐ ๋ณํ์ง ์๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
๐น Event Handling (์ด๋ฒคํธ ์ฒ๋ฆฌ)
์ฌ์ฉ์์ ๋์์ ๋ฐ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ.
function ButtonClicker() {
const handleClick = () => {
alert("๋ฒํผ์ด ํด๋ฆญ๋์์ต๋๋ค.");
};
return (
<button onClick={handleClick}>
ํด๋ฆญ
</button>
);
}
- ๋ํ์ ์ธ ์ด๋ฒคํธ
- onClick
- onChange
- onSubmit
- onKeyDown
- HTML์ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ ์ฌํ๋, React์์๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ JSX ์์์ ์ง์ ์ ๋ฌํ๋ฉฐ, ์ด๋ฒคํธ ์ด๋ฆ์ ์นด๋ฉ์ผ์ด์ค(camelCase)๋ฅผ ์ฌ์ฉํ๋ค.
๐ ํต์ฌ ์์ฝํ ๐
| ๊ฐ๋ | ์ญํ | ํ ์ค ์์ฝ |
| Component | ํ๋ฉด ๊ตฌ์ฑ | UI๋ฅผ ๋ง๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์ |
| JSX | UI ์์ฑ | JavaScript์์ HTML์ฒ๋ผ ์์ฑํ๋ ๋ฌธ๋ฒ |
| Props | ๋ฐ์ดํฐ ์ ๋ฌ | ๋ถ๋ชจ๊ฐ ์์์๊ฒ ์ ๋ฌํ๋ ๋ฐ์ดํฐ |
| useState | ์ํ ๊ด๋ฆฌ | ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ |
| useEffect | ๋ถ์ ํจ๊ณผ ์ฒ๋ฆฌ | ๋ ๋๋ง ํ ์คํํ ์์ ์ ์ฒ๋ฆฌํ๋ Hook |
| Conditional Rendering | ์กฐ๊ฑด ๋ถ๊ธฐ | ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ UI๋ฅผ ์ถ๋ ฅ |
| map() | ๋ฐ๋ณต ์ถ๋ ฅ | ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณตํด์ ํ๋ฉด์ ํ์ |
| Event Handling | ์ฌ์ฉ์ ์ํธ์์ฉ | ํด๋ฆญ·์ ๋ ฅ ๋ฑ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ |
'<React>' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Component (์ปดํฌ๋ํธ) (0) | 2026.07.07 |
|---|---|
| Create React App(CRA) tool chain (0) | 2026.07.06 |
| VS Code์์ React ํ๋ก์ ํธ ์์ฑ (0) | 2026.07.06 |
| Node.js ์ค์น์ CMD&Powershell ์ฌ์ฉ (0) | 2026.07.06 |
| My Directory Setting (0) | 2026.07.06 |
