함수의 본질 적인 역할(주된 효과) : input을 받아서 output을 산출하는 것
함수의 Side Effect : input을 받아서 output을 산출하는 것 이외의 모든 행위
- Side Effect가 없는 함수 : 순수함수
const sum = (x) => { return x +1;}
- Side Effect가 존재하는 경우 : 함수가 함수 외부의 값을 읽어오거나 변경하면 side effect 있다고 표현
const num = 1;
const sum = (x) => {return x + num;}
함수내부의 값이 아닌 외부값 num을 읽어오고있음
기피해야하는 대상이다.
Side Effect를 최소화 하면서 프로그램을 설계하되, 필요한 상황에서는 반드시 통제 가능하도록 만들어서 Side Effect가 프로그램의 유지보수에 악영향을 주지 않도록 설계해야한다
리액트에서 사용하는 함수 컴포넌트의 input과 output을 생각해보자
state
props
를 통해서 JSX
를 만들어 내는 것이 본질적인 역할이다(state, props) => JSX
state와 props를 통해서 JSX를 만들어내는 외의 모든 행위
현대 개발에서는 프론트엔드와 백엔드의 역할이 나뉘어 있다
프론트엔드가 백엔드 API를 통해서 필요한 데이터를 가져오는 행위는 필수적인 행위이다. 하지만, 이는 곧 외부(백엔드 API)로 부터 데이터를 가져오는 것이기에 Side Effect라고도 할 수 있다.
프론트엔드 개발자로서 웹개발시 DOM에 접근하고 조작하는 행위는 필수적이다.
하지만 React는 DOM 조작을 알아서 처리해주기에 개발자는 UI와 핵심 로직에만 신경쓰는 선언적인 개발이 가능해 졌다.
DOM에 직접 접근할 일이 많지 않고, 권장되지 않는다
특정한 상황에서 직접 DOM 접근해야만 하는 일이 있을때만 사용한다
DOM을 조작하는 것은 곧 외부의 값(DOM)을 읽어오고 변경하는 것이기에 Side Effect라고 할 수 있다.
프로그래밍에서 구독이란 ? 어떤 것을 계속해서 관찰하다가 변화가 발생하면 특정 액션을 취하는 것
setTimeout
setInterval
등의 메서드를 제공해줘서 쉽게 시간을 구독할 수 있는 기능을 제공하고있다