๋ณํ๊ฐ ์ฆ์ ์คํํธ์ ํน์ฑ์ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ด ์ถ๊ฐ, ๋ณ๊ฒฝ, ์ญ์ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์์ฃผ ๊ฒฝํํ์๋ค.
์ด๋ด ๋๋ง๋ค ์ฝ๋๋ฅผ ์ด์ฌํ ๋ฏ์ด๋ณด๋ฉฐ ์๊ตฌ์ฌํญ์ ๋ง์ถ์ด ์ฌ์์ฑํ์๋ค. ์ผ๋ถ ์ปดํฌ๋ํธ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ ๊ฒฝ์ฐ๋ ์์๊ณ , ์๊ฐ ๊ด๊ณ์ ๋น์ทํ์ง๋ง '์กฐ๊ธ' ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ์ฝ๋์ ์ค๋ณต์ ๋ง๋ค๊ธฐ๋ ํ์๋ค.
์ด๋ ๊ฒ ๋ ๋ฒ ์ผํ๋ ์ํฉ์ด ๋๋ฌด๋๋ ๋นํจ์จ์ ์ด๋ผ ์๊ฐํ๊ณ ๋ ํํํ ๊ธฐํ์ ์๊ตฌํ๊ฑฐ๋ ๊ฐ๋ฐ์ ์ฐฉ์ํ๊ธฐ ์ ๊ธฐํ์์ ๋ถ์กฑํ ๋ถ๋ถ์ด ์๋ ๊ผผ๊ผผํ ์ฒดํฌํด๋ณด๊ธฐ๋ ํ์๋ค.
์ฒ์์๋ ์ด๋ฌํ ์ด์ ์ ๋ํ ์ฑ ์์ด ์ถฉ๋ถํ ๊ณ ๋ คํ์ง ๋ชปํ ๊ธฐํ์ ์๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ๊ทธ๊ฑด ๋น์ฆ๋์ค์ ๋ํด ๊ณ ๋ฏผํ์ง ์์ ์งง์ ์๊ฐ์ด์๋ค. ๋ด๋ถ์ ์ผ๋ก ์๋ฌด๋ฆฌ ํํํ ๊ธฐํ์ ๊ฐ์ถ๋๋ผ๋ ๋น์ฆ๋์ค๋ ์ธ๋ถ์ ์ํฅ์ ๋ฐ์ ์ ๋ฐ์ ์๋ค. ์ธ๋ถ์ ๋์ฆ๋ฅผ ๋ง์กฑ์์ผ์ผํ๊ณ ์ํฉ์ ๊ณ ๋ คํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ์ด๋ป๊ฒ ํด์ผํ๋๊ฐ์ ๋ํด ๊ณ ๋ฏผ์ ํด๋ดค๋ค. ์์ธกํ๊ธฐ ์ด๋ ค์ด ์ํฉ์ ๋ํด ๋ชจ๋ ๊ฒ์ ํต์ ํ๋ ค๊ณ ํ๊ธฐ๋ณด๋ค ๊ทธ๋ฌํ ์ํฉ์ ์๋ง๊ฒ ๋ชจ์์ด ๋ณํ๋ ๊ฒ์ด ํ์ํ๋ค ์๊ฐํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ ์ฐํจ์ ๊ฐ์ถ์ด์ผํ๊ณ ํ๋ก ํธ์๋ ์์ง๋์ด ๊ด์ ์์๋ ์ ์ฐํ UI, ์ ์ฐํ ์ปดํฌ๋ํธ ์ค๊ณ๋ฅผ ํด์ผํ๋ค๋ ๊ฒ์ ํ์์ฑ์ ๋๊ผ๋ค.
์ ์ฐํ ์ปดํฌ๋ํธ๋ ๋ฌด์์ธ๊ฐ์ ๋ํด ์ค์ค๋ก ๊ณ ๋ฏผํ๊ณ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ์๋๋ ํด๋ณด์์ง๋ง, ์ด๋ฏธ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ค์ ๊ฐ์ง ๊ฒฝํ์ ์ฐธ๊ณ ํด๋ณด๋ ๊ฒ๋ ์ข๊ฒ ๋ค๊ณ ์๊ฐํ์ฌ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐพ์๋ณด์๋ค.
์ญํ ๊ณผ ์ฑ ์(Role & Responsibility)์ ์ํํธ์จ์ด ํ์์์ ๊ธฐ๋ณธ ์์น์ด๋ค. ๊ฐ๊ฐ์ ๊ตฌ์ฑ์์ด ํ ์ผ๊ณผ ๊ทธ์ ๋ฐ๋ฅธ ์ฑ ์์ ๋ช ํํ ์ ์ํ๊ณ ์ด๋ฅผ ์ํํจ์ผ๋ก์จ ํ์ ์ฑ๊ณผ๋ฅผ ๋์ด๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. ์ฆ, ์ญํ ์ ๊ตฌ์ฑ์์ด ์ํํด์ผ ํ ์ผ์, ์ฑ ์์ ๊ทธ ์ผ์ ์ํํจ์ผ๋ก์จ ๋ฐ์ํ๋ ๊ฒฐ๊ณผ์ ๊ทธ์ ๋ํ ์ฑ ์์ ์๋ฏธํ๋ค.
์ญํ : ํด์ผํ๋ ์ผ
์ฑ ์: ์ญํ ์ ์ํํ์ฌ ๋ฐ์ํ ๊ฒฐ๊ณผ
์ญํ ๊ณผ ์ฑ ์์ ๋ถ๋ช ํ ํด์ผํ๊ณ ์ค์ํ ์ด์ ๋ ๋ฌด์์ผ๊น? ์๋ฅผ ๋ค์ด, ๋ฌผ๋ฅ ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ํ์์ ๋ฐฐ์ก์ํ์ ๋ฐ๋ผ ๊ตฌ๋งค์์๊ฒ ์ํ๋ฅผ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ ์๋กญ๊ฒ ๊ฐ๋ฐํ๋ค๊ณ ํ์. ๋ง์ฝ ํด๋น ๊ธฐ๋ฅ์ ์ผ๊ด์ฑ ์์ด ์ฌ๋ฌ๋ช ์์ ์์ฑํ๋ค๋ฉด, ๋ถํ์ํ ๋ฆฌ์์ค๊ฐ ๋ค์ด๊ฐ ์ ์์ผ๋ฉฐ ์ด๋ค ์ฝ๋์ ์๋์ด ์์น ์๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ฐ์ ์ํค๋ ๊ฒ์ด ์ฐ๋ ค๋๋ค.
๋ฐ๋๋ก, ๋๊ฐ ์ด๋ค ๋ถ๋ถ์ ๋ด๋นํด์ผ ํ๋์ง, ์ด๋ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ด์ผํ๋ ์ง๊ฐ ๋ช ํํ๋ค๋ฉด ์๋ก์๊ฒ ์ํฅ์ ๋ฏธ์น ์ํ์ฑ์ด ์ค์ด๋ค๋ฉฐ, ์ด๋ค ๋ถ๋ถ์์ ์์น ์๋ ์๋์ ํ๋ค ์ฑ ์์ ๊ทธ ์ญํ ์ ๋งก์ ์ชฝ์์ ์ฒ๋ฆฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ๊ฐ์ ์ ์ข๋ค.
๋ฌผ๋ก ํ์๋ค ๊ฐ์ ๊ณต์ ๊ฐ ์ค์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค๋ฉด ์ ์์ ๊ฒฝ์ฐ๋ ์ด๋์ ๋ ํด๊ฒฐ๋ ์ ์๊ฒ ์ง๋ง, ์ฐ๋ฆฌ๋ ํ์ฌ์ ๊ท๋ชจ๊ฐ 1000๋ช ์ด ๋๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ๋ ๊ทน๋จ์ ์ผ๋ก ์๊ฐํด๋ณผ ํ์๊ฐ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ๋ ์ฌ์ค ์ ๋ชจ๋ ํ์์ ๊ณต์ ์ํ๋ฅผ ์ผ์น ์ํค๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง, ํ์์ ๊ฒฝ์ฐ๋ ํ์ ๊ท๋ชจ์ ๊ด๊ณ ์์ด ์ญํ ๊ณผ ์ฑ ์๋ง ๋ถ๋ช ํ ํ๊ณ , ์ํ๋ง ์ ํ๋ค๋ฉด, ์กฐ๊ธ ๋ ํต์ ํ๊ธฐ ์ฉ์ดํ ์ํ๋ก ๋ง๋ค์ด ์ค๋ค.
์ด๊ฒ์ ์ปดํฌ๋ํธ์ ์ ์ฉํ ๊ฒฝ์ฐ๊ฐ ์์ด ์ดํด๋ณด์๋ค.
ํ๋ก ํธ์๋ ํ๋ก๊ทธ๋๋ฐ์์๋ ํฌ๊ฒ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ํจ์นญํ๋ ์ญํ , ๊ทธ ๋ฆฌ์์ค๋ฅผ ์๊ตฌ์ํฉ์ ๋ง์ถ์ด ํ๋ฉด์ ๋ ๋๋ง ์ํค๋ ์ญํ ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉ์ ์กฐ์์ ํตํด ์ํ ๊ฐ(UI, data ๋ฑ)์ ๋ฐ๊พธ๋ ์ญํ ๋ก ๋๋ ์ ์๋ค.
์ฒ์์๋ ๋ชจ๋ ๊ตฌํ์ด ํ ๊ณณ์์ ๊ด๋ฆฌ๋๋ ๊ฒ์์ ์์ํด๋ณด์
// --- ์๋ต ---
const CommonComponent = () => {
const [todoList, setTodoList] = useState([]);
const deleteTodo = () => {
// ์ ์ ๊ฐ ํด๋ฆญํ todo๋ฅผ ์ญ์ ํ๋ ๋ก์ง ์คํ
}
useEffect(()=> {
// 1. ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ๋์ด์ค๋ ์ญํ
(async()=> {
const fetchedTodoList = await fetchTodoList();
setTodoList(fetchedTodoList);
})()
},[])
return (
<ul>
// 2. ๋ฆฌ์์ค๋ฅผ ํ๋ฉด์ ์๋ง๊ฒ ๋
ธ์ถํ๋ ์ญํ
{todoList.map((todo)=>
<li key={todo.id}>
<h3>{todo.title}</h3>
<p>{todo.paragraph}</p>
<input checked={todo.checked} />
// 3. ์ ์ ์ ์ธํฐ๋์
์ ํตํด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ญํ
<button type='button' onClick={deleteTodo}>์ญ์ ํ๊ธฐ</button>
</li>)
}
<ul>
)
}
export default CommonComponent;
๊ฐ๋จํ ๋ณด๊ธฐ์ํด ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์๋ก ๋ค์์ง๋ง, ์์งํ ์ด ์ ๋ ๋๋ ๊ท๋ชจ์์๋ ์ด๋ฐ์์ผ๋ก ํ๋์ ๊ณต๊ฐ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๊ฒ์ด ์ด์ฐ๋ณด๋ฉด ๋ ํจ์จ์ ์ผ ์ ์๊ฒ ๋ค. ๋ฐ์ดํฐ๊ฐ ํ๋ฉด์ ๋ฟ๋ ค์ง๊ณ , ์ด๋ค ์ ์ ์ธํฐ๋์
์ด ์๋ ์ง ํ ๋์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง, ์ด๊ธฐ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ด๋ ๊ฒ ์ฝ๊ฒ ํด๊ฒฐ๋๋๋ผ๋ ์๋น์ค๊ฐ ๊ณ ๋ํ๋๋ฉด ๋ ์๋ก ์๋ก ๊ฐ์ ์ดํด ๊ด๊ณ๊ฐ ์ฎ์ฌ ์๋ ์ฌ๋๋ง ์๋
๋ก์ง์ด ๋์ด๋ฒ๋ฆฐ๋ค.
๋๋ง ํด๋ ๋ก์ง์ด ์ฝํ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ ์ง์ ์ ์ฐพ๊ธฐ ์ด๋ ค์ ๋ค๋์ง, ํ ์ปดํฌ๋ํธ์ ๋ณต์ก์ฑ์ ๋์ ์์ผ ๋ค๋ฅธ ํ์์ด ํ์ ํ๊ธฐ ์ด๋ ต๊ณ , ๋ ์์ ๋ ์ ๋๋ ค๋ฉด ๋ ์ก์์ผํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ ์ ์ด ์๋ค.
๋๊ตฌ๋ ๋ค๋ฃฐ ์ ์๋ค๋ ๊ฒ์ ๊ทธ ๋งํผ ํ์ ์ด ์ฉ์ดํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๊ธฐ ์ํด์๋ ๊ฐ๋จํ ๊ตฌํ ์ฌํญ๋ ์ด๊ธฐ์ ์ญํ ๊ณผ ์ฑ ์์ ์ ์ฉ์์ผ ํ์ ์ด ๊ฐ๋ฅํ๊ฒ ํด์ผํ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๊ธฐ์กด ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํฉํ ๋งํด์ผ ํ ํ์์ฑ์ด ์๋ค๊ณ ์๊ฐ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์๋ ํ๋์ ์ค์ํ ์กฐ๊ฑด์ด ๋ฐ๋ฅธ๋ค. ๋ฐ๋ก ๋ฆฌํฉํ ๋งํ ์ฝ๋๊ฐ ๊ธฐ์กด ๋์์ ์ ์งํ๊ณ ๋ฒ๊ทธ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค๋ ๊ฒ์ ์ฆ๋ช ํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๋ฆฌํฉํ ๋ง ํ ์ผ์ผํ ์ด์ ๋์๊ณผ ๋์ผํ ์ง ์ฒดํฌํ๋ ๊ฒ์ ๋๋ฌด๋ ํฐ ๋ฆฌ์์ค ๋ญ๋น์ด๋ค.
์ด๋ฅผ ์ํด ๋ฆฌํฉํ ๋ง๊ณผ ํ์ง ๊ด๋ฆฌ์ ์ ๊ฒฝ์ฐ๋ ๊ฐ๋ฐ ํ์์๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ์ด๋ค ์ธ๋ถ ๋ณํ์ ๋ง์ถ์ด ์ฝ๋๋ฅผ ๋ฐ๊พธ๋๋ผ๋ ํ ์คํธ๋ง ํต๊ณผํ๋ฉด ์ ์ด๋ ์ด์ ์ ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ ๋ฐ์์ํค์ง ์๋ ๊ฒ์ด ์ฆ๋ช ๋๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค. ๋ํ, ํ ์คํธ ์ฝ๋๋ฅผ ํตํด ์ด๋ค ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ด ์๋ ์ง ํ์ ์ด ๋๋ฉด์ ๊ฐ๋ฐ ๋ฌธ์์ ์ญํ ๋ ํ๋ค๊ณ ํ๋ค.
์ญํ ๊ณผ ์ฑ ์์ ์ ์ฉํ ์ปดํฌ๋ํธ์ ๋ํด ์๊ฐํ๊ณ ์ ์ฉ์ํค๋ค ๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ ํ ์คํธ ์ฝ๋์ ๋ํ ํ์์ฑ๊ณผ ๊ด์ฌ์ด ์๊ฒผ๋ค. ์ ์ฐํ ์ปดํฌ๋ํธ๋ก ์๋น์ค๋ฅผ ๊ตฌํํ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ํ์์ ๋น์ฆ๋์ค ์ํฉ์ ๋ณํ๋ฅผ ๊ฐ์ ํ๊ณ ๋ฆฌํฉํฐ๋ง์ ์ฐ์ตํ๋ ๋ฐ์ ์๊ฐ์ ๋ค์ฌ๋ณด๋ ๊ฒ์ด ์ข๊ฒ ๋ค.
์ฐธ๊ณ ๊ธ