Just Do IT!
[JavaScript] 순수 함수, side Effect 본문
728x90
반응형
순수함수 (pure function)
- 입력값에 대해 항상 동일한 출력값을 반환하며, 함수 외부에 영향을 끼치는 부작용(side effect)이 없는 함수
- 함수의 실행 결과는 오직 입력 값에만 의존하며, 외부의 상태(state)를 변경하지 않는다
- 불변성(immutability)을 보장한다
- 불변성 : 데이터나 상태가 변경되지 않는 것을 의미하며, 함수형 프로그래밍에서는 데이터를 변경하는 대신 새로운 데이터를 생성하는 방식을 취한다
- 순수 함수를 사용하면 상태 변경이 없기 때문에 프로그램의 안정성이 높아지고, 디버깅이 쉬워진다
반면 순수 함수가 아닌 함수는 부작용이 발생할 수 있다
side effect
- 함수의 실행 결과가 입력값 이외의 외부 상태를 변경하는 것
- 부작용은 예측하기 어렵기 때문에 코드를 이해하고 디버깅하기가 어렵고, 프로그램 전체적인 안정성을 낮추는 요소가 될 수 있다
- 함수 내부에서 Ajax, setTimeout, console.log 등의 호출이 모두 사이드 이펙트이다.
- 함수 내부를 벗어나 외부와 상호작용하기 때문이다.
- Ajax나 setTimeout과 같은 함수들은 브라우저 API를 사용하는 일이고, console.log는 브라우저의 콘솔창에 문자열을 출력하는 함수이다
따라서 순수 함수를 사용하면 함수형 프로그래밍에서 불변성을 보장하며, 부작용을 최소화하고 안정적인 코드를 작성할 수 있다
순수 함수를 사용해야 하는 이유
- 가독성이 좋다
- 순수함수는 컨텍스트와 관계없이 동작하기 때문에 가독성이 좋다. 단지 필요한 값들을 매개변수로 받을 뿐이며, 어플리케이션의 상태를 필요로하지 않는다.
- 사이드 이펙트는 동일한 인풋임에도 불구하고 상황에 따라 결과가 달라질 수 있기 때문에 이게 왜 이런 결과가 만들어졌는지 이곳 저곳을 살펴야 알 수 있어 코드를 읽게 힘들게 만든다.
- 테스트 하기 좋다
- 순수함수는 같은 인풋엔 같은 결과가 나오기 때문에 단위 테스트를 작성하기가 다른 함수에 비해 간편하다.
- 모듈화와 재사용성
- 어플리케이션의 다른 부분을 전혀 사용하지 않고 변경하지도 않으며, 오직 매개변수에만 의존하여 동작하기 떄문에 아주 응집도가 높다고 할 수 있다.
728x90
'개발 공부 > JavaScript' 카테고리의 다른 글
Jest로 테스트 코드 작성하기 (기본 사용법) (1) | 2023.10.30 |
---|---|
[JavaScript] Intl API 사용하기 (숫자 천단위마다 콤마 찍기) (1) | 2023.04.18 |
[JavaScript] this의 4가지 동작 방식 (0) | 2023.03.31 |
[JavaScript] 호이스팅(Hoisting)이란? (+ TDZ란) (0) | 2023.03.28 |
[JavaScript] Parameter(매개변수)와 Argument(인자)의 차이 (0) | 2023.03.28 |