๐ React๋ ์ ํ์ํ๊ฑธ๊น?
๋ฆฌ์กํธ๋ฅผ ์ ๋ฐฐ์ฐ๋๊ฐ? ์ด๋ค ๊ธฐ์ ๋ ์ด์ ์์ด ๋ง๋ค์ด์ง์ง ์๋๋ค.
๋ชจ๋ ๊ธฐ์ ์ ๋ถํธํจ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์๊ณ ๋ฐ์ ํด์๋ค.
๊ทธ๋์ ์ด๋ค ๊ธฐ์ ์ ๋ฐฐ์ด๋ค๋ ๊ฒ์ ๋จ์ํ ์ฌ์ฉ๋ฒ๋ง ๋ฐฐ์ด๋ค๋ ๊ฒ๋ง ์๋ฏธํ์ง ์๋๋ค.
๋จ์ํ ์ฌ์ฉ๋ฒ๋ง ์ตํ๋ ์์ผ๋ก ๋ฐฐ์ฐ๊ฒ ๋๋ฉด ๊ธฐ์ ์ ๋ํ ์์ผ๊ฐ ์ข์์ง๊ฒ ๋๋ค.
์์ผ๊ฐ ์ข์์ง๋ค๋ ๊ฑด ๋ฌธ์ ํด๊ฒฐ๋ฅ๋ ฅ์ด ๋ถ์กฑํ๋ค๊ณ ๋ ๋ณผ ์ ์๋ค.
์์ผ๊ฐ ์ข์์ง๋ฉด, ๋ด๊ฐ ๋ฐฐ์ด๋๋ก๊ฐ ์๋๋ฉด ๋๋ ๋ด๊ฐ ๊ฒช์ด๋ณธ๋๋ก๊ฐ ์๋๋ฉด ํด๊ฒฐํ ์๊ฐ ์๊ฒ ๋๊ณ ,
์ฌํ๋ฉด ํด๊ฒฐํ ์์ง๊ฐ ์๊ฒ ๋๊ณ ๋ฌธ์ ํด๊ฒฐ๋ฅ๋ ฅ์ด ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํ๋ ๊ณณ์ ์๋ค.
โ๏ธ ์ค๋ณต ์ฝ๋ ์์ฑ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์
- header, nav, footer ๋ฑ ๊ฐ๋ณ์ ์ธ ์์๊ฐ ์๋ ๊ณตํต ์์์ ๋ํ ์ค๋ณต ์ฝ๋ ๊ด๋ฆฌ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ ์ฉ
- ์ฌ์ฌ์ฉ๋๋ ์์๋ฅผ ์ปดํฌ๋ํธํ (Component ๊ธฐ๋ฐ์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
โ๏ธ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ฐจ์ด
- ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ(์ ์ฐจ๋ฅผ ํ๋ํ๋ ๋ค ๋์ด ํด์ผํจ) : ๊ฑฐ๋ํ ์น์ฌ์ดํธ์ ๊ธฐ๋ฅ์ ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐํ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๊ณ ๊ฐ๋ ํ๊ธฐ ํ๋ค์ด์ง (ex : jQuery)
- ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ(๊ทธ๋ฅ ๋ชฉ์ ์ ๋ฐ๋ก ๋งํจ) (ex : React)
๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง์ ์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉฐ, ํ๋ก๊ทธ๋๋จธ๊ฐ ๋จ๊ณ๋ณ๋ก ๋ช
ํํ ๋ช
๋ น์ ์์ฑํด์ผ ํ๋ค๋ ์ ์ด๋ค. ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด DOM ์์๋ฅผ ์ ํํ๊ณ , ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๊ณ , ์์๋ฅผ ์กฐ์ํ๋ ๋ฑ์ ์์
์ ๋ช
ํํ ๋ช
๋ น์ ํตํด ์ํํ๋ค.
์๋ฅผ ๋ค์ด, ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํน์ ํ
์คํธ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ(๋ช
๋ นํ)์ React(์ ์ธํ)๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ(๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ)
const button = document.getElementById('myButton');
const text = document.getElementById('myText');
button.addEventListener('click', function() {
text.textContent = 'Button was clicked!';
});
React(์ ์ธํ ํ๋ก๊ทธ๋๋ฐ)
import React, { useState } from 'react';
function MyComponent() {
const [text, setText] = useState('');
function handleClick() {
setText('Button was clicked!');
}
return (
<div>
<button onClick={handleClick}>Click me</button>
<p>{text}</p>
</div>
);
}
๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ฒํผ ์์์ ํ ์คํธ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ์ ํํ๊ณ , ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ๋ ๋ฑ์ ์ ์ฐจ๋ฅผ ๋ช ์์ ์ผ๋ก ์์ฑํด์ผ ํ๋ค. ๋ฐ๋ฉด์ React์์๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์๋ง ํธ์ถํ๋ฉด React๊ฐ ์๋์ผ๋ก DOM์ ์ ๋ฐ์ดํธํ๋ค. ์ด๋ฌํ ์ฐจ์ด์ ๋๋ฌธ์ React๋ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ถ๋ฅ๋๋ค.
โ๏ธ Virtual DOM
- DOM(Document Object Model) : ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ ๊ฐ์ฒด
- ๋ธ๋ผ์ฐ์ ์์ ํ์ ์ด์์ ์ฐ์ฐ ์ํ ์ ์ฑ๋ฅ์ ํ๋ก ์ด์ด์ง
- ๊ฐ์์ DOM์ ๋ฏธ๋ฆฌ ์ ๋ฐ์ดํธ๋ฅผ ์์ผ๋ณธ ํ (๋ ๋๋ง ์ฐ์ฐ์) ํ๋ฒ์ ๋ชจ์์ ์ค์ DOM์ ์ ๋ฐ์ดํธ ์ํด. ๊ณผ๋ค์ฐ์ฐ ํด๊ฒฐ => 5๋ฒ ์ ๋ฐ์ดํธํ ๊ฑฐ 1๋ฒ๋ง์ ํต์งธ๋ก ์ ๋ฐ์ดํธ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ.
๐ ์ฐธ๊ณ ์๋ฃ
๋ฆฌ์กํธ๋ ๊ธฐ์ ์ ๋ํ ์ ๊ทผ์ผ๋ก ๋ ์ฐพ์๋ณธ ์๋ฃ๋ค
โ๏ธ ๋ฆฌ์กํธ๋ ์น/์ฑ์ View๋ฅผ ๊ฐ๋ฐํ ์ ์๋๋ก ํด์ค๋ค?
React๋ View๋ง์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ฌ๊ธฐ์ ๋งํ๋ View๋ MVC ํจํด์ V(View)
MVC ํจํด (Model : Data, View : UI, Controller : Logic)
์ฐธ๊ณ ์๋ฃ
โ๏ธ ์ข์ ๊ฑด ์๊ฒ ๋๋ฐ ์ ์ฐ๋๊ฑธ๊น? (๋ ์ด์ ๋ฅผ ์ฐพ์๋ณด์)
์ปดํฌ๋ํธ ์ถ์ํ
๋ฆฌ์กํธ๋ก ๋ง๋ค์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฆฌ๋จผํธ(Element)๋ผ๋ ํ๋ฉด์ ๋ณด์ฌ์ง ๊ฒ์ ํํํ๋ ์์๋ก ๊ตฌ์ฑ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(Object-Oriented Language)๋ก ๋ง๋ค์ด์ง ํ๋ก๊ทธ๋จ์ด ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋์ด ์๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ์์ฑ์๊ฐ ์๋ค. ์ด ์์ฑ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ์ญํ ์ ๋งก๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฆฌ์กํธ์๋ ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ๋ ์ปดํฌ๋ํธ(Component)๊ฐ ์๋ค. ์ปดํฌ๋ํธ๋ Props๋ผ๋ ์ ๋ ฅ์ ๋ฐ๊ณ , ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
์ฌ๊ธฐ์ ์ปดํฌ๋ํธ๋ ๋ณต์กํ UI๋จ์ ์ถ์ํํด์ค๋ค.์ ์ถ์ํ ํด์ค๋ค๋ ์ ์ด ์ค์ํ ๊น?
์ฐ๋ฆฌ๋ ์ปดํจํฐ๋ฅผ ์ด์ฉํด ๋ณต์กํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ค. ์๋ค์ํผ ์ปดํจํฐ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๋ฐฉ๋ฒ๋ก ์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฆ, ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์๋ค์ ์์์ ์ด์ผ๊ธฐํ ๋ณต์กํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๊ณ ์๋ค.๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํด๋ต์ ๋ณผ ์๋ ์์ผ๋ ์ ์๋ ค์ง ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ธ ๊ฐ์ฒด์งํฅ(Object-Oriented), ๋ช ๋ น์ค์ฌ(ํน์ ์ ์ฐจ์งํฅ, Procedural), ํจ์ํ(Functional) ๋ฑ์ด ์์. ํฅ๋ฏธ๋กญ๊ฒ๋ ๊ฐ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ค๊ณ ํ๋๋ผ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๊ฐ ๊ทน๊ณผ ๊ทน์ ๋ฌ๋ฆด ์ ๋๋ก ๋ค๋ฅด๊ฒ ๋๋ ์ด ์ธ ํจ๋ฌ๋ค์์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ์ด์ ์ธ ์์ด๋์ด๋ ์ ๋ถ ๊ฐ๋ค.
๋ชจ๋ ๊ฐ์์ ๊ฐ๋ ์ ํตํด ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ๊ณ , ํด๊ฒฐํ ๋ค, ๊ทธ ํด๊ฒฐ๋ฒ์ ๋ค์ ํฉ์ณ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๊ทธ๋ผ ์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์๋ค์ ๋ฌธ์ ๋ฅผ ํ ๋ฒ์ ํ์ง ์๊ณ ์ชผ๊ฐ์ ํ๊น?
์ปดํจํฐ๋ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํ๋ฒ์ ํด๊ฒฐํ ์ ์๋ ๊ฑธ๊น?
"ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์๋ค์ด ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ์ ํธ๋ ์์ด๋์ด์ ๊ธฐ๋ฐํ ์ด์ ๋ ์ฌ๋์ ๋์ ํ๊ณ ๋๋ฌธ์ด๋ค (by Bartosz Milewski)"
์๋ฌด๋ฆฌ ์ปดํจํฐ๊ฐ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํ๋ฒ์ ํด๊ฒฐํ ์ ์๋ค๊ณ ํ์ฌ๋, ๊ทธ ์ปดํจํฐ์๊ฒ ๋ช ๋ น์ ๋ด๋ฆฌ๋(์ปดํจํฐ๋ ๋ช ๋ น์ ๋ฐ๋ผ ์ผ์ ํ ๋ฟ, ์ค์ค๋ก ๋ฌด์ธ๊ฐ๋ฅผ ํ์ง ์์ต๋๋ค.) ์ฌ๋์ด ๊ทธ๋ฐ ๋ฐฉ๋ฒ์ ์ค๊ณํด ๋ผ ์ ์์ผ๋ฉด ์ปดํจํฐ๋ ๋ฌด์ฉ์ง๋ฌผ์ด ๋์ด๋ฒ๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์์๋ ๋ง์๋๋ ธ๋ฏ์ด, ์ฌ๋์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํ๋ฒ์ ํด๊ฒฐํด ๋ด๋ ๋ฐฉ๋ฒ์ ์ค๊ณํ ์ ์๋ค. (์ค๋ต)
์์ ์ด์ผ๊ธฐํ๋ฏ์ด, ์ฌ๋์ ๋์ ์ ๋ณด ์ ์ฅ ๋ฅ๋ ฅ ๋ฐ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํ๊ณ๊ฐ ์์ต๋๋ค. ์๋ฌด๋ฆฌ ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ์๋ค๊ณ ํ์ฌ๋, ์ชผ๊ฐ์ง ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ ๋ค๋ฅธ ์ชผ๊ฐ์ง ๋ฌธ์ ๋ค์ ํด๊ฒฐ์ฑ ๊ณผ ํฉ์น๊ธฐ ์ํด์๋ ํํ ๋์ ํด๊ฒฐ์ฑ ์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ์ ์ฅํ๋ค ๋ณด๋ฉด ์ฌ๋์ ๋๋ ํ๊ณ์ ๋๋ฌํ๊ฒ ๋์ด ์์ง์.
ํ์ง๋ง, ๊ทธ ํด๊ฒฐ์ฑ ์ ์จ๊ธด๋ค๋ฉด ์ด๋จ๊น์? ํ๋ก๊ทธ๋๋จธ๋ ๊ทธ์ ์ด๋ค ์์ ์์ ํด๊ฒฐ์ฑ ์ด ๋ค์ด ์๋ค๊ณ ์์ํ๊ธฐ๋ง ํ๋ฉด ๋๋๊ฒ๋๋ค. ์์ ๋ฌธ์ ๋ฅผ ๋ฃ์ผ๋ฉด ๊ทธ ๋ฌธ์ ์ ๋ํ ๋ต์ ๋ค์ ๋์ ธ์ฃผ๋ ์์์! ์ด๋ ๊ฒ ๋ฌธ์ ๋ฅผ ์ถ์ํ์ํค๋ฉด ์ด๋ก ์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๋์ ์ ์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ฆ, ํด๊ฒฐ์ฑ ์ ๋ฌดํ๋๋ก ํฉ์ณ๋๊ฐ ์ ์๋ค๋ ์ด์ผ๊ธฐ. ๋ค์ ์ฒ์์ผ๋ก ๋์๊ฐ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ์๋ฉด, ์ถ์ํ๋ ์ฌ๋์ ๋๋ก๋ ์ค๊ณํ ์ ์๋ ๋ณต์กํ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ค๊ณํ ์ ์๊ฒ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์ค์ํฉ๋๋ค.
๋ค์ ๋งํด, ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ๊ธฐ ์ํ ๊ฐ๋ ๊ฐ์ ์กด์ฌ๋ก, ๋ณต์กํ๊ณ ๊ฑฐ๋ํ UI๋ ์ฝ๊ฒ ์ค๊ณํ ์ ์๊ฒ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์ค์ํฉ๋๋ค.
๋ณํํ๋ ์ํ๊ฐ ๊ด๋ฆฌ
UI๋ ์ฌ์ฉ์์ ๋์์์ด ์ํธ์์ฉํฉ๋๋ค. ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ผ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ๊ฐ ๋ณํํ๊ณ , ๋ณํ๋ ์ํ์ ๋ฐ๋ผ ํ๋ฉด์ด ๋ณํํฉ๋๋ค. ์ํ์ ํ๋ฉด, ์ด ๋์ ๋ณํํ๋ ๊ฐ(Value over time)์ ๋๋ค. ๋ณํํ๋ ๊ฐ๋ค์ ๋ค๋ฃจ๊ธฐ ์ด๋ ต์ต๋๋ค. ๊ฐ์ ๋ณํ์ ๋ง์ถ์ ๊ด๋ จ๋ ๋ค๋ฅธ ๊ฒ๋ค๋ ๋ณํ์ํค๊ธฐ ์ํด ํญ์ ์์์ฃผ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ์ฌ๋๋ค์ ์ฌ๊ธฐ์ ํฌ๊ธฐํ์ง ์๊ณ , “๊ฐ์ ๋ณํ๋ฅผ ์ค์ค๋ก ์ ํ์ํค๊ฒ ํ๋ฉด ๋๋ค.” ๋ผ๋ ์์ด๋์ด์ ๊ธฐ๋ฐํด ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๊ณ ์ํด ๋์ต๋๋ค. ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ(Reactive Programming)์ ์ต์ ธ๋ฒ๋ธ(Observable)๊ณผ ์ฌ๋ฌ ๊ฐ๋ ๋ค์ ์ฌ์ฉํด ๋ณํํ๋ ๊ฐ๋ค์ ํ๋ฅญํ ๋ค๋ฃน๋๋ค.
"์ต์ ธ๋ฒ๋ธ, ์คํธ๋ฆผ(Stream). ์ด ๋ ์ฉ์ด๋ ๋์์ด์ ๋๋ค. ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ ์ปค๋ฎค๋ํฐ๋ ์ด๋ค ๋จ์ด๋ฅผ ์ฐ๋ ๊ฐ์ ์๋ฏธ"
์ฐ๋ฆฌ์ ์ปดํฌ๋ํธ๋ ์ต์ ธ๋ฒ๋ธ์ด๋ ๊ตฌ๋ ์ด๋, ๋ณต์กํ ๊ฐ๋ ๋ค์ ์๊ฐํ์ง ์๊ณ ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ด๋ป๊ฒ ๋๋๋งํ ๊ฒ์ธ๊ฐ๋ง ์๊ฐํ๋ฉด ๋๋ค. ๋ณํํ๋ ๊ฐ์ ์ ์ธ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์์ฝ๊ฒ ๋ค๋ฃจ๋ ๊ฒ. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ๋ฌ๋ถ์ ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ UI(Interactive UI)๋ฅผ ์ ๋ง ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๋ค.
๊ฐ์ ๋์ ํตํ ๋น ๋ฅธ ๋ ๋๋ง
์ ๋ฆฌ์กํธ๋ DOM ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ์์ฒด์ ์ธ ์๋ฆฌ๋จผํธ๋ค์ ํตํด ํ๋ฉด์ ๊ตฌ์ฑํ ๊น์? ์ฌ์ค, ๋ฆฌ์กํธ๋ DOM์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์๊ฒ๋ ๋ ธ์ถ์์ผ์ฃผ์ง ์๋ ๊ฒ์ผ ๋ฟ ์ ๋๋ค. ์๋ํ๋ฉด DOM์ ๋ณ๊ฒฝ์ ๋ฏผ๊ฐํ๊ณ , ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ง์ ๋ค๋ฃจ๋ ์ผ์ ์ํํ๊ธฐ ๋๋ฌธ์ด์ฃ . ๊ทธ๊ฑธ ์๊ณ ์๋ ๋ฆฌ์กํธ๋ ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ๋ก ๋ ผ๋ฆฌ์ ์ธ, ๊ฐ์์ DOM ํธ๋ฆฌ๋ฅผ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ค๋ฃจ๊ฒ ํ๊ณ ์์ ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ง๋ค์ด๋ธ ๊ฐ์์ DOM ํธ๋ฆฌ๋ฅผ ๋ถ์ํ์ฌ DOM ํธ๋ฆฌ๋ฅผ ์ ๊ตํ๊ณ ๋๋ํ๊ฒ(ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ ํ๊ฑฐ๋, ๋น์ฅ ํ์ํ์ง ์์ ์ ๋ฐ์ดํธ๋ ๋ฏธ๋ฃจ๊ณ , ๋ณ๊ฒฝ ์์ ์ ์ค์ผ์ฅด๋ง ํ๋ ๋ฑ ์ฌ๋ฌ ์ต์ ํ๋ฅผ ํฉ๋๋ค) ๋ค๋ฃจ์ง์. ์ฆ, ๋ฆฌ์กํธ๋ ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ์ฐ๊ธฐ ํ๋ ์ฌ์ํ ๋ถ๋ถ๋ค์ ์ง์ ํด๊ฒฐํด์ฃผ์ด ๊ฐ๋ฐ์๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ง์คํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ฐ๋ฐ์๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ณ ํ๋ฉด์ ๊ตฌ์ฑํ๊ธฐ ์ํด ๊ณ ์ฉ๋์์ง, DOM ํธ๋ฆฌ๋ ์ต์ ํ ์ธ์ ํ๋ผ๊ณ ๊ณ ์ฉ๋ ๊ฑด ์๋๋๊น์(๊ณ ์ฉ์ฃผ ์ ์ฅ์์์, ์ต์ ํ๋ ๋ฌผ๋ก ์ค์ํ์ง๋ง ํ๋ก๋ํธ๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒ ๋ ์ค์ํ์ง์.)
โ๏ธ ๋ฆฌ์กํธ๋ฅผ ์ ๋ค๋ฃจ๋ ค๋ฉด?
1) ์ปดํฌ๋ํธ์ ๋ํ ๋ฐ์ด๋ ์์ฌ ๊ฒฐ์
์ปดํฌ๋ํธ๋ฅผ ์ผ๋ง๋ ์์ ๋จ์๋ก ์ชผ๊ฐค ๊ฒ์ธ์ง, ์ด๋ป๊ฒ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๊ฒ์ธ์ง ์๋ ๊ฐ๋ฐ์.
2) state๊ฐ ์กด์ฌํ๋ ์์น์ ๋ํ ์์ฌ ๊ฒฐ์
state๋ ๊ฐ์ DOM ๋ด์ ์ฌ๋ฌ ๊ณณ์ ์กด์ฌํ ์ ์๋๋ฐ, ์ด๋ฅผ ์ด๋์ ์์น์ํฌ์ง ์๋ ๊ฐ๋ฐ์.
3) state๊ฐ ๋ณ๊ฒฝ๋ ๋, ์ปดํฌ๋ํธ์ ์ด๋ค ๋ณํ๋ฅผ ์ค ๊ฒ์ธ์ง์ ๋ํ ์์ฌ ๊ฒฐ์
state๊ฐ ๋ณ๊ฒฝ๋์์ ๋, ์ด๋ค ๋ถ๋ถ์ด re-rendering ๋์ด์ผ ํ๋์ง ์๋ ๊ฐ๋ฐ์.
์ฐธ๊ณ
https://velog.io/@productuidev/Udemy-React๊ฐ-ํ์ํ-์ด์ -์ ๋ฌธ
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
forwardRef: ์์ ์ปดํฌ๋ํธ์ ref๋ฅผ ์ ๋ฌํ๊ธฐ (0) | 2024.02.22 |
---|---|
VSCode tabํค ์ ๋ ฅ์ emmet ๊ธฐ๋ฅ ์๋ ๋, emmet์ด ์๋ํ์ง ์์ ๋ (0) | 2024.02.22 |
๊ธฐ์ ๋ฉด์ ์ค๋น (0) | 2023.11.26 |
useEffect() ์ข ์์ฑ์ผ๋ก ์ถ๊ฐํ ํญ๋ชฉ ๋ฐ ์ถ๊ฐํ์ง ์์ ํญ๋ชฉ (0) | 2023.10.15 |
์ฃผ์์ฐฝ์ URL์ ์ ๋ ฅํ๋ฉด ๋ฒ์ด์ง๋ ์ผ (0) | 2023.10.08 |