[ React ] Side Effect

seondayยท2022๋…„ 12์›” 4์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
5/5
post-thumbnail

โœ… 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์„ ์‚ฐ์ถœํ•˜๋Š” ๊ณผ์ •์—์„œ

  1. ์™ธ๋ถ€์˜ ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š” ํ–‰์œ„
  2. ์™ธ๋ถ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ–‰์œ„



๐Ÿ“Œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ Side Effect๋Š” ๊ธฐํ”ผํ•ด์•ผํ•˜๋Š” ๋Œ€์ƒ !

  • ํ•จ์ˆ˜ ๋™์ž‘ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
// ์˜ˆ์ธก ๊ฐ€๋Šฅ(side effectโŒ)
const sum = (x) => x + 1;

// ์˜ˆ์ธก ๋ถˆ๊ฐ€(side effectโญ•๏ธ)
const sum = (x) => x + num;
  • ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€
    โ‡’ ํ•˜์ง€๋งŒ, ํ”„๋กœ๊ทธ๋žจ์ด ์™ธ๋ถ€๋กœ ๊ทธ ์–ด๋–ค ๊ฐ’๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ทธ ํ”„๋กœ๊ทธ๋žจ์€ ์˜๋ฏธ๊ฐ€ ์—†๊ณ ,
    ๋˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด๋‘๊ณ  ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š” ํ–‰์œ„๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žˆ์–ด์„œ
    ํ•„์ˆ˜๋ถˆ๊ฐ€๊ฒฐํ•œ ์š”์†Œ
  • ๋”ฐ๋ผ์„œ, side effect๋ฅผ ์ตœ์†Œํ™” ํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„,
    side effect๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ! ํ†ต์ œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์œ ์ง€๋ณด์ˆ˜์— ์•…์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•  ๊ฒƒ



๐Ÿ’ก React์—์„œ์˜ Side Effect

๐Ÿ“Œ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ input๊ณผ output

  • React์—์„œ rendering = state, props๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ UI ์š”์†Œ๋ฅผ ๊ทธ๋ ค๋‚ด๋Š” ํ–‰์œ„
  • props์™€ state๋ฅผ ํ†ตํ•ด JSX๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์ด ๋ณธ์งˆ์ ์ธ ์—ญํ• 
  • (props, state) = JSX

  1. Data Fetching
    โ‡’ ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ๋ฐฑ์—”๋“œ API๋ฅผ ํ†ตํ•ด์„œ ๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ–‰์œ„๋Š” ํ•„์ˆ˜์ ์œผ๋กœ ๋ฐœ์ƒ

  2. DOM ์ ‘๊ทผ ๋ฐ ์กฐ์ž‘
    โ‡’
    React๋Š” DOM์˜ ์กฐ์ž‘์„ React์—์„œ ๋Œ€์‹ ํ•ด์ฃผ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” UI์™€ ํ•ต์‹ฌ ๋กœ์ง์—๋งŒ ์‹ ๊ฒฝ ์“ฐ๋„๋ก ์„ ์–ธ์ ์ธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— DOM์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ผ์ด ๋งŽ์ง€๋„ ์•Š๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ ๊ถŒ์žฅ๋˜์ง€ ์•Š์ง€๋งŒ
    โ‡’ ํŠน์ • ์ƒํ™ฉ(document ๊ฐ์ฒด์— scroll eventListener๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋“ฑ)์—์„œ๋Š” DOM์— ์ ‘๊ทผํ•˜๊ณ  ์ง์ ‘ ์กฐ์ž‘์„ ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ

  3. ๊ตฌ๋…(Subscribe)
    โ‡’ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ย "๊ตฌ๋…"์ด๋ž€ ์–ด๋–ค ๊ฒƒ์˜ ๋ณ€ํ™”๋ฅผ ๊ณ„์†ํ•ด์„œ ์ง€์ผœ๋ณด๊ณ  ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํŠน์ •ํ•œ ์•ก์…˜์„ ์ทจํ•˜๋Š” ๊ฒƒ, ์›น ๊ฐœ๋ฐœ์—์„œ ํ”ํžˆ ๊ตฌ๋…ํ•˜๋Š” ๊ฒƒ์€ย ์‹œ๊ฐ„, ์‹œ๊ฐ„์€ ๊ณ ์ •๋˜์–ด์žˆ์ง€ ์•Š๊ณ  ํ•ญ์ƒ ๋ณ€ํ™”ํ•จ
    โ‡’์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹œ๊ฐ„์„ ๊ตฌ๋…ํ•˜๋ฉด์„œ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ด ์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ธย setTimeout, ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š”ย setIntervalย ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด์„œ ์‹œ๊ฐ„์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ดํ–‰ํ•œ๋‹ค




profile
๋งค์ผ ๊ธฐ๋กํ•˜๋Š” ์Šต๊ด€,

0๊ฐœ์˜ ๋Œ“๊ธ€