โ
Side Effect
๐กย ํ๋ก๊ทธ๋๋ฐ์์ โ๋ถ์์ฉ(Side Effect)โ?
- ์ฝ๋๊ฐ ์๋ํ ์ฃผ๋ ํจ๊ณผ ์ธ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ํ๋ ํจ๊ณผ
- ํ๋ก๊ทธ๋จ์ ์ด๋ฃจ๋ ๊ฐ์ฅ ์์ ๋จ์ = ํจ์์์ ์ฐ์ด๋ ์ฉ์ด
- ํจ์์ ๋ณธ์ง์ ์ธ ์ญํ โ input์ ๋ฐ์ output์ ์ฐ์ถํ๋ ๊ฒ
- ํจ์์ ๋ถ์์ฉ โ input์ ๋ฐ์ output์ ์ฐ์ถํ๋ ๊ฒ ์ด์ธ์ ๋ชจ๋ ํ์
Side Effect
- input์ธ x๋ฅผ ๋ฐ์์ output์ธ x + 1์ ์ฐ์ถํ๋ ํจ์
- ์์ํจ์ = input โ output ์ธ ๋ค๋ฅธ ํ์ ์์, side effect โ
// ์์ ํจ์
const sum = (x) => {
return x = 1;
}
๐ ์ธ๋ถ ์ํ ์ฝ์ด์ค๊ธฐ
- input์ธ x๋ฅผ ๋ฐ์์ output์ธ x + num์ ์ฐ์ถ
- side effect๋ฅผ โญ๏ธ โ ํจ์ ์ธ๋ถ์ ๊ฐ์ธ โnumโ์ ์ฝ์ด์ค๊ณ ์๊ธฐ ๋๋ฌธ
- side effect = ํจ์๊ฐ ํจ์ ๋ด๋ถ์ ๊ฐ์ ์ ์ธํ ๋๋จธ์ง ๊ฐ๋ค์ ์ฝ์ด ์ฌ ๋
// ์ธ๋ถ ์ํ ์ฝ์ด์ค๊ธฐ
const num = 1;
const sum = (x) => {
return x + num;
}
๐ ์ธ๋ถ ์ํ ๋ณ๊ฒฝ์ํค๊ธฐ
- input์ธ x๋ฅผ ๋ฐ์์ output์ธ num์ x + 1 ๋ก ๋ณ๊ฒฝ
- side effect โญ๏ธ โ ํจ์ ์ธ๋ถ์ ๊ฐ์ธ โnumโ์ ์ฝ์ด์ค๊ณ , ๋ณ๊ฒฝ์ํค๊ธฐ ๋๋ฌธ
- side effect = ํจ์๊ฐ ํจ์ ์ธ๋ถ์ ๊ฐ์ ๋ณ๊ฒฝํ ๋
// ์ธ๋ถ ์ํ ๋ณ๊ฒฝ์ํค๊ธฐ
let num;
const num = (x) => {
num = x + 1;
}
๐ค Quiz
- ์ธ๋ถ์ ๊ฐ โ ์ธ๋ถ์ ๋ณ์
- DOM ์กฐ์, ์ฝ์ ํจ๋์ ๋ฌธ์๋ฅผ ์ถ๋ ฅ
=> ๋ํ ํจ์ ์ธ๋ถ์ ์กด์ฌํ๋ DOM๊ณผ ์ฝ์์ ์ํ๋ฅผ ๋ณ๊ฒฝ ์ํค๋ ๊ฒ
- ๋ ํจ์ ๋ชจ๋ side effect๊ฐ ์กด์ฌ !!
//1
const printNum = (x) => {
console.log(x);
};
//2
const changeTitle = (newTitle) => {
const title = document.getElementById('title');
title.innerText = newTitle;
};
โ
ย Summary
๐ก Side Effect?
ํ๋ก๊ทธ๋๋ฐ์์ side effect๋ ํจ์๊ฐ input์ ๋ฐ์์ output์ ์ฐ์ถํ๋ ๊ณผ์ ์์
- ์ธ๋ถ์ ๊ฐ์ ์ฝ์ด์ค๋ ํ์
- ์ธ๋ถ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ํ์
๐ ํ๋ก๊ทธ๋๋ฐ์์ Side Effect๋ ๊ธฐํผํด์ผํ๋ ๋์ !
- ํจ์ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ๊ธฐ๊ฐ ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค
// ์์ธก ๊ฐ๋ฅ(side effectโ)
const sum = (x) => x + 1;
// ์์ธก ๋ถ๊ฐ(side effectโญ๏ธ)
const sum = (x) => x + num;
- ์ ์ง๋ณด์์ ์ด๋ ค์
โ ํ์ง๋ง, ํ๋ก๊ทธ๋จ์ด ์ธ๋ถ๋ก ๊ทธ ์ด๋ค ๊ฐ๋ ์ถ๋ ฅํ์ง ์๋๋ค๋ฉด ๊ทธ ํ๋ก๊ทธ๋จ์ ์๋ฏธ๊ฐ ์๊ณ ,
๋ํ ๋ฐ์ดํฐ๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํด๋๊ณ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ์ฝ์ด์ค๋ ํ์๋ ํ๋ก๊ทธ๋๋ฐ์ ์์ด์
ํ์๋ถ๊ฐ๊ฒฐํ ์์
- ๋ฐ๋ผ์, side effect๋ฅผ ์ต์ํ ํ๋ฉด์ ํ๋ก๊ทธ๋จ์ ์ค๊ณ,
side effect๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ฐ๋์! ํต์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์ ์ง๋ณด์์ ์
์ํฅ์ ์ฃผ์ง ์๋๋ก ์ฃผ์ํ ๊ฒ
๐ก React์์์ Side Effect
- React์์ rendering = state, props๋ฅผ ๊ธฐ๋ฐ์ผ๋ก UI ์์๋ฅผ ๊ทธ๋ ค๋ด๋ ํ์
- props์ state๋ฅผ ํตํด JSX๋ฅผ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ด ๋ณธ์ง์ ์ธ ์ญํ
- (props, state) = JSX
- Data Fetching
โ ํ๋ก ํธ์๋๊ฐ ๋ฐฑ์๋ API๋ฅผ ํตํด์ ๊ธฐ์กด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํ์๋ ํ์์ ์ผ๋ก ๋ฐ์
- DOM ์ ๊ทผ ๋ฐ ์กฐ์
โ React๋ DOM์ ์กฐ์์ React์์ ๋์ ํด์ฃผ๊ณ ๊ฐ๋ฐ์๋ UI์ ํต์ฌ ๋ก์ง์๋ง ์ ๊ฒฝ ์ฐ๋๋ก ์ ์ธ์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๊ธฐ ๋๋ฌธ์ DOM์ ์ง์ ์ ๊ทผํ ์ผ์ด ๋ง์ง๋ ์๊ณ ๋๋ถ๋ถ์ ์ํฉ์์ ๊ถ์ฅ๋์ง ์์ง๋ง
โ ํน์ ์ํฉ(document ๊ฐ์ฒด์ scroll eventListener๋ฅผ ๋ฑ๋กํ๋ ๋ฑ)์์๋ DOM์ ์ ๊ทผํ๊ณ ์ง์ ์กฐ์์ ํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์
- ๊ตฌ๋
(Subscribe)
โ ํ๋ก๊ทธ๋๋ฐ์์์ย "๊ตฌ๋
"์ด๋ ์ด๋ค ๊ฒ์ ๋ณํ๋ฅผ ๊ณ์ํด์ ์ง์ผ๋ณด๊ณ ๋ณํ๊ฐ ๋ฐ์ํ๋ฉด ํน์ ํ ์ก์
์ ์ทจํ๋ ๊ฒ, ์น ๊ฐ๋ฐ์์ ํํ ๊ตฌ๋
ํ๋ ๊ฒ์ย ์๊ฐ, ์๊ฐ์ ๊ณ ์ ๋์ด์์ง ์๊ณ ํญ์ ๋ณํํจ
โ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๊ฐ์ ๊ตฌ๋
ํ๋ฉด์ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ํน์ ๋์์ ์ํํด ์ฃผ๋ ๋ฉ์๋์ธย setTimeout
, ์ผ์ ์๊ฐ๋ง๋ค ํน์ ๋์์ ์ํํด์ฃผ๋ย setInterval
ย ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ฃผ๊ณ ์ด๋ฅผ ์ด์ฉํด์ ์๊ฐ์ ๋ณํ์ ๋ฐ๋ผ ์ํ๋ ๋์์ ์ดํํ๋ค