part1 ํ๋ฌ ๊ฐ์ ์ฌ์ ์ด ๋์ด๋ฌ๋ค. ์ฝ๋์ ๋ถํธ์บ ํ์์ ์ฒ์ ํจ๊ปํ ํ๊ณผ์ ์ด๋ณ์ด๋ผ๋.. ๊ฐ์ด ํ๋ก์ ํธ ํ๋ฒ ๋ชปํด๋ด์ ๋๋ฌด๋ ์์ฌ์ ๋ค. (๋ชจ๋๊ฐ ๋ถ๋ฌ์ํ ์ผ๋ฏธ์๋๋ฐ..(๋ํผ์ ใ ใ ))
part1์ด ๋๋ ํ, ํ ๋ด ํผ์ด๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋ค. ๋ค๋ฅธ ํผ์ด์ ๋ํด ๊ตฌ๊ธ ์ค๋ฌธ์ ์ข์๋ ์ , ๊ฐ์ ํด์ผํ ์ , ๋ค์ ํํธ์ ๋์ ํ์ผ๋ฉด ์ข์ ์ ์ ์์ฑํด์ ์ ์ถํ๊ณ , ์ด๋ฅผ ๋ชจ์์ pdf ํ์ผ ํํ๋ก ๋ฐ์ ์ ์์๋ค.
์ฒ์์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ ๋ ํ์๋ค์ ํ๊ฐ๋ฅผ ๋ฐ๋ ๊ฒ์ด๋ผ ๊ธด์ฅ ๋ฐ ๊ธฐ๋ ๋ฐใ ใ ใ
๋ ๋ ํ๋ค๋ ๊ฒ๊ณผ, ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋
ธ๋ ฅํ๋ ์ ์ ์์๋ด์ฃผ์
์ ๋๋ฌด ๊ณ ๋ง์ ๋ค๐ญ๐ญ
์ฌ์ค ์ฒ์์๋ ์ด์ ์ด ๋์ณค๊ณ ์ ์ ์ง์ณ๊ฐ๋ ๋๋ฅผ ๋๋ผ๊ณ ์์๋๋ฐ(feat ์ปจ๋์
์กฐ์ ์คํจ) ์ด๋ฐ ๋ฆฌ๋ทฐ๋ฅผ ํด์ฃผ์
์ ๋ค์ ์ด์ ์ ๋์ฐพ์ ์ ์์๋ค!
๋งค๋์ ๋ฐ์ด์ง, ์ ์ด์์ ๋ฉด๋ด์ ํ๋ฉด์ ํผ์ด๋ฆฌ๋ทฐ๋ ๋ณด๊ณ ์ ๋ฐ์ ์ธ ์ง๊ธ๊น์ง์ ํํ๋ฅผ ๋ณด์์ ๋ ๊ฐ์ฅ ๋ถ์๊ธฐ๊ฐ ์ข์ ํ์ด์๋ ๊ฒ ๊ฐ๋ค๋ ํ์ ๋ฐ์๋ค! ๋๋ฌด ๊ธฐ๋ปค๊ณ , ์์ฌ์๋ ์ปธ๋คใ ใ ..
๋ค์์ ๋ท์ด์ ํ๋ก์ ํธ๋ฅผ ํ๋ ๋ ์ด ์ค๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ..(์๋ ์ฐ๋ฆฌ๋ผ๋ฆฌ ์ฌ์ด๋ ํ์ ?ใ ใ )
part1, ์ฌ๋ฏธ์์์ต๋๋ค!๐
#
ํค(key)๋ฅผ ๊ฐ(value)์ ์ฐ๊ฒฐํ์ฌ ํ๋์ ํค๊ฐ 0 ๋๋ 1๊ฐ์ ๊ฐ๊ณผ ์ฐ๊ด๋จ
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์์น
= ์ธ๋ฑ์ค
ํด์ํ ์ด๋ธ ์ ๋ฆฌ
ํน์ ๊ฐ์ ์ํ๋ ๋ฒ์์ ์์ฐ์๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ์
ํด์ ํจ์์ ์กฐ๊ฑด๋ค
๋๋๊ธฐ ๋ฐฉ๋ฒ (MOD ์ฌ์ฉ)
๊ณฑ์ ๋ฐฉ๋ฒ
โ ํญ์ 0๋ณด๋ค๋ ํฌ๊ณ ํ ์ด๋ธ ํฌ๊ธฐ๋ณด๋ค๋ ์์ ํด์๊ฐ์ด ๋์จ๋ค.
๋ด๋ถ ๋ฉ์๋๊ฐ ์๋ค. ํ์ด์ฌ์ ํด์ ํจ์๋ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๊ฐ์ ์๋ฌด ์ ์๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ์.
hash("ํ์ด์ฌ")
์ถฉ๋์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ํด์๊ฐ์ ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ฉฐ, ์ถฉ๋์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํด์ ํจ์์ ์ฑ๋ฅ์ด ๊ฒฐ์ ๋๋ค.
Chaining
๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋งํฌ๋ ๋ฆฌ์คํธ ์ ์ฅํด์ ์ถฉ๋ ํด๊ฒฐ
O(n)
O(1)
Open Addressing
O(n)
O(1)
๊ธฐ๋๊ฐ : 1/ (1-load factor)
๋ณด๋ค ์๋ค.setState ํธ์ถ์ด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์, state ๋ณ์๊ฐ ํญ์ ์ต์ ์ํ๋ฅผ ๋ฐ์ํ์ง ์์ ์ ์๋ค.
useState
hook์ state ๊ฐ์ ์
๋ฐ์ดํธํ ๋ ๋น๋๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ค.WHY?
ํด๋น ์ฝ๋๊ฐ ์คํ๋ ๋์ lexical environment์์ ๊ฐ์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ํจ์๊ฐ ํธ์ถ๋ ํ์๋ ์ด์์๋ ๋ณ์๋ฅผ ํ์ธํ ์ ์๋ Closure์ ํน์ง์ ์ด์ฉํ๋ค.
JavaScript์์ ํจ์์ ์คํ ์ปจํ ์คํธ์๋ ํด๋น ํจ์๊ฐ ํธ์ถ๋ ๋ ์์ฑ๋ ํ๊ฒฝ ์ ๋ณด๊ฐ ํฌํจ๋๋ค. ์ด ํ๊ฒฝ ์ ๋ณด๋ ํด๋น ํจ์์์ ์ฌ์ฉ๋๋ ๋ณ์๋ค์ ๊ฐ์ ์ ์ฅํ๋ค.
const [count, setCount] = useState(0);
useEffect(() => {
console.log(`The count is ${count}`);
}, [count]);
useEffect
hook์ count
๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์คํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋, count
๊ฐ ๋ณ๊ฒฝ๋๋ ๋์ useEffect
hook์ด ์คํ๋ ๋ count
๋ณ์๋ ์ด์ lexical environment์์ ์ฐธ์กฐ๋ ๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ useState
hook์ด setCount
ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ํธ์ถํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
์ด์ ์ํ๊ฐ์ ์ฝ๋ฐฑ ํจ์์ ์ ๋ฌํด ์๋ก์ด ์ํ๊ฐ์ ๋ฐํํ๋ ๋ฐฉ๋ฒ
if (options.offset === 0) {
setItems(reviews);
} else {
setItems((prevItems) => [...prevItems, ...reviews]);
}
items
๋ฐฐ์ด๊ณผ ์๋ก ๋ฐ์์จ reviews
๋ฐฐ์ด์ ํฉ์ณ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ ๋ค์, ๊ทธ ๋ฐฐ์ด์ setItems
๋ฅผ ํจ์๋ฅผ ํตํด items
state ๊ฐ์ผ๋ก ์ค์ ํ๋ค.setItmes
ํจ์์ ํจ์๋ฅผ ์๊ท๋จผํธ๋ก ์ ๋ฌํ๋๋ฐ (=์ฆ ์ฝ๋ฐฑ) ์ด์ items
๋ฐฐ์ด ๊ฐ์ ์ด์ฉํด์ ์๋ก์ด items
๋ฐฐ์ด์ ๋ง๋ค์ด์ผํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.items
๋ฐฐ์ด์ ๊ฐ์ ์๊ท๋จผํธ๋ก ์ ๋ฌํ๊ณ , ์๋ก์ด state ๊ฐ์ ๋ฐํํ๋ ํจ์๋ฅผ ์คํํ๋ค.const [state, setState] = useState(() => {
return initialState;
});
์ฒ์ ๋ ๋๋ง ํ ๋ ํ ๋ฒ๋ง ์ฝ๋ฐฑ์ ์คํํด์ ์ด๊น๊ฐ์ ๋ง๋ค๊ณ , ์ดํ ์ฝ๋ฐฑ์ ์คํํ์ง ์๋๋ค.
๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๊ฐ์ ์ฐธ์กฐํ์ ๋ฐ๋์ ์๋ก์ด ๊ฐ์ ๋ง๋ค์ด์ ์ ๋ฌํด์ผ ํ๋ค.
์ฐธ์กฐํ State ์ฌ์ฉ์ ์๋ชป๋ ์
const [state, setState] = useState({ count: 0 });
const handleAddClick = () => {
state.count += 1; // ์ฐธ์กฐํ ๋ณ์์ ํ๋กํผํฐ๋ฅผ ์์
setState(state); // ์ฐธ์กฐํ์ด๊ธฐ ๋๋ฌธ์ ๋ณ์์ ๊ฐ(๋ ํผ๋ฐ์ค)๋ ๋ณํ์ง ์์
}
์ฐธ์กฐํ State ์ฌ์ฉ์ ์ฌ๋ฐ๋ฅธ ์
const [state, setState] = useState({ count: 0 });
const handleAddClick = () => {
setState({ ...state, count: state.count + 1 }); // ์๋ก์ด ๊ฐ์ฒด ์์ฑ
}
์ฌ์ค ์ด ๋ด์ฉ์ ๋ด๋ถ ๋์ ์๋ฆฌ์ ๋ํ ๋ด์ฉ์ธ ๊ฒ ๊ฐ๋ค. ๋ฐ๋ผ์ ํจ๋ฆฌ(+์ผ๋)์ ํจ๊ป ์ฝ 4์๊ฐ ๋์๐ญ github ์์ค์ฝ๋๋ฅผ ๋ถ์ํ์ง๋ง ์์ง ์ ๋ฆฌ๊ฐ ์์ฑ์ด ์๋์๋ค.
๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด,
ํจ์ํ ์
๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ์ํ๊ฐ์ ์ธ์๋ก ๋ฐ์์ ์๋ก์ด ์ํ๊ฐ์ ๋ฐํํ๋ ํจ์๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ค.
React์ ์ํ ์ ๋ฐ์ดํธ๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์, setState() ํจ์๊ฐ ํธ์ถ๋๋ ์์ ์ ์ด๋ฏธ ์ด์ ๊ฐ์ด ์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ์ด ๋๋ฌธ์ setState() ํจ์์ ํจ์๋ฅผ ์ ๋ฌํ์ฌ ์ด์ ๊ฐ์ ์ธ์๋ก ๋ฐ์์์ ์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ ์ฝ๋์์ count ๊ฐ์ด 0์์ 1๋ก ์ ๋ฐ์ดํธ๋๋ ์ํฉ์ ๊ฐ์ ํด๋ณธ๋ค๋ฉด,
setCount(count + 1);
setCount(count + 1);
์ด ์ฝ๋๋ count ๊ฐ์ด 2๊ฐ ์๋๋ผ 1์ด ๋๋ค.. ์๋ํ๋ฉด ๋๋ฒ์งธ setCount() ํจ์๊ฐ ํธ์ถ๋ ๋ count ๊ฐ์ ์ด๋ฏธ 1๋ก ์ ๋ฐ์ดํธ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ํจ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
setCount(prevCount => prevCount + 1);
setCount(prevCount => prevCount + 1);
์ฒซ ๋ฒ์งธ setCount() ํจ์๊ฐ ํธ์ถ๋ ๋, ์ด์ ๊ฐ์ธ 0์ด prevCount ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋๋ค. ๋ฐ๋ผ์ ์ด์ ๊ฐ์ ๋ฐํ์ผ๋ก +1์ด ๋์ด count ๊ฐ์ด 1์ด ๋๋ค. ๋ ๋ฒ์งธ setCount() ํจ์๊ฐ ํธ์ถ๋ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์ ๊ฐ 1์ด prevCount ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋์ด count ๊ฐ์ด 2๊ฐ ๋๋ค.
์ฆ, ํจ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ๊ฐ์ ์ธ์๋ก ๋ฐ์์์ ์์ ํ๊ฒ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ค.
์ด ์ ์ด ๊ถ๊ธํด์ ์ฝ์ง์ ์ค๋ํ๋ค. ๋์ ํ ์ดํด๊ฐ ์๋๋๋ฐ, ์ผ๋์ ์ค๋ช ์ ํ์ ๋ฐ์ ๋ ํ๊ตฌํด๋ณด๊ณ ๋๋์ด ์ดํดํ๋ค! ์ด๊ฒ์ state๊ฐ ์ ์ฅ๋๋ Queue๋ฅผ ๋ถ์ํ๋ฉด ์์ ์์๋ค. (github์ useState์ ๊ด๋ จ๋ ์์ค์ฝ๋๊ฐ ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ ธ์์ด์ ํ๋ค์๋ค.. ๊ณต์๋ฌธ์์๋ ์งง๊ฒ ์ธ๊ธ๋์ด์๊ธด ํ๋ฏ?!)
์ถํ ํฌ์คํ ์ผ๋ก ์ ๋ฆฌํด์ ์์ธํ ๋ค๋ค๋ณด๊ณ ์ ํ๋ค!
์ด์ ์ ๋ฑ๋ก๋.. ์ด๋ผ๋ ๋ง์ด ๊ต์ฅ์ด ์์ํ๋ค. ๋๋์ฒด ์ด๋์ ๋ฑ๋ก์ด ๋์ด์ ๊ธฐ์ตํ๊ณ ์๋ค๊ฐ, ๋ค์ update๋ ์คํ์ด ๋๋๊ฑฐ์ง?
๊ทธ์ ๋ํด ํ๊ตฌํด๋ณธ ๊ฒฐ๊ณผ(๋ผ๊ณ ์ฐ๋ฉฐ ์๊ฐ ๊ฐ์๋ฃ๊ธฐ๋ผ๊ณ ๋งํ๋ค)
๊ทธ๋ฌ๋๊น, useEffect์ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ dependency array์ ๋ฐ๋ผ, ์ด์ ๋ ๋๋ง์์ ๋ฑ๋ก๋ clean-up ํจ์๊ฐ ์คํ๋๋ค๋ ๊ฒ์ด๋ค. ์ฆ, clean-up ํจ์๋ ํ์ฌ ๋ ๋๋ง์์ ์คํ๋ useEffect ์ฝ๋ฐฑ ํจ์์ ๋ฐํ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ์ด์ ๋ ๋๋ง์์ ๋ฑ๋ก๋ clean-up ํจ์๋, ์ด์ ๋ ๋๋ง์์ ์คํ๋ useEffect ์ฝ๋ฐฑ ํจ์์ ๋ฐํ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒ์ด๋ค.
๊ทธ!๋ฌ!๋!๊น!
clean-upํจ์๋ ํด๋ก์ ์ธ ๊ฒ์ด๋ค.
useEffect ๋ด๋ถ์์ cleanup ํจ์๋ฅผ ์ ์ํ๋ฉด ์ด ํจ์๋ useEffect๊ฐ ํธ์ถ๋ ๋์ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ํด๋ก์ ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ๊ทธ๋์ cleanup ํจ์์์ ์ด์ ๋ ๋๋ง์์ ์์ฑ๋ ๋ฆฌ์์ค๋ค์ ์ ์ดํ ์ ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก useEffect ํจ์๊ฐ ์ด์ ๋ ๋๋ง์์ ๋ฐํํ ํจ์๋ฅผ ํธ์ถํ๋๋ฐ, ์ด๋ cleanup ํจ์๋ ์ด์ ๋ ๋๋ง์์์ ๊ฐ๋ค์ ์ฐธ์กฐํ ์ ์๋ค๋ ์ ์์ ํด๋ก์ ๊ฐ๋ ์ด ์ ์ฉ๋ ์ ์๋ ๊ฒ์ด๋ค.