Side Effect(부수효과)
함수 내에서 어떤 구현이 함수 외부에 영향을 끼치는 경우 해당 함수는 Side Effect가 있다고 한다. 리액트에서는 컴포넌트 내에서 fetch를 사용해 API 정보를 가져오거나, 이벤트를 활용해 DOM을 직접 조작할때 Side Effect가 발생했다고 한다.
전역 변수 foo를 bar라는 함수가 수정하는 예제
let foo = 'hello';
function bar() {
foo = 'world';
}
bar(); // bar는 Side Effect를 발생시킵니다!
Pure Function(순수 함수)
오직 함수의 입력만이 함수의 결과에 영향을 주는 함수를 순수 함수라고 한다. 함수의 입력이 아닌 다른 값이 함수의 결과에 영향을 미치거나, 함수가 입력으로 전달된 값을 수정할 경우 순수 함수라고 부를 수 없다. 순수 함수의 특징 중 하나는 어떠한 전달 인자가 주어질 경우 항상 똑같은 값이 리턴됨을 보장한다. 그래서 예측 가능한 함수이다.
function upper(str) {
return str.toUpperCase(); // toUpperCase 메소드는 원본을 수정하지 않습니다 (Immutable)
}
upper('hello') // 'HELLO'
React의 함수 컴포넌트
React의 함수 컴포넌트는 props가 입력으로, JSX Element가 출력이 된다. 여기에는 그 어떤 Side Effect도 없으며 순수 함수로 작동한다.
function SingleTweet({ writer, body, createdAt }) {
return <div>
<div>{writer}</div>
<div>{createdAt}</div>
<div>{body}</div>
</div>
}
하지만 보통 React 애플리케이션을 작성할 때에는 AJAX 요청이 필요하거나, LocalStorage 또는 타이머와 같은 리액트와 상관없는 API를 사용하는 경우가 발생할 수 있다. 이는 리액트 입장에서는 전부 Side Effectd이다. 리액트에서는 Side Effect를 다루기 위한 Hook인 Effect Hook을 제공한다.
이 Effect Hook에 대해서는 다음 글에서 자세히 다뤄보도록 하자.
'프로그래밍 > React' 카테고리의 다른 글
React - Diffing Algorithm (0) | 2023.05.22 |
---|---|
React - Virtual DOM (0) | 2023.05.22 |
React - Styled Components (0) | 2023.04.19 |
React - State & Props (0) | 2023.03.28 |
React - 기초 (0) | 2023.03.22 |
댓글