어제 프론트엔드 직군에서 면접의 질문 중 대답하지 못했던 순수함수에 대한 글을 작성해보겠습니다.
순수함수
순수함수는 아래의 두가지 특성을 가지는 함수입니다.
1. 함수 외부의 어떤 데이터도 변경시키지 않는 함수
2. 동일한 입력에 항상 동일한 출력을 하는 함수
No Side Effect
위의 예제와 같이 addItem
함수는 addItem함수는 인자로 받은 외부의 array
배열의 요소를 직접 변경합니다.
이로 인해 함수의 밖에서 선언된 array
배열의 값이 변경되었습니다. 이러한 함수는 순수함수 라고 부르지 않는다.
위의 addItem
함수를 순수함수로 아래와 같이 순수함수로 만들 수 있습니다.
위와 같이 인자로 받은 배열은 깊은 복사를 통해 함수에서 값이 변해도 외부에 영향을 주지 않도록 합니다.
(만약 spread 연산자
가 아직 완전히 깊은 복사를 한다고 생각하시는 분은 아래의 글을 추천드립니다)
동일한 입력, 동일한 출력
위의 경우 sum
함수가 항상 같은 입력에 같은 결과를 반환할 것 같지만 변수 a
가 변함에 따라 다른 결과를 반환하기에 순수함수가 아닙니다
왜 순수함수?
물론 모든 함수가 순수할 순 없습니다. 하지만 이런 순수함수들을 적극적으로 활용하여 버그의 발생 가능성을 줄이며 개발하는 패러다임을 함수형 프로그래밍이라고 합니다.
함수형 프로그래밍 기법은 다음에 더 자세히 다뤄보겠습니다.
'개발 > Javscript,Typescript' 카테고리의 다른 글
[JS] 함수 표현식, 선언식 (2) | 2021.03.30 |
---|---|
[JS] 프로토타입 (Prototype) (2) | 2021.03.29 |
[JS] 클로저 (Closure) (0) | 2021.03.24 |
[JS] 전개(spread)는 완전히 깊은 복사일까? (2) | 2021.02.08 |
[JS] 자바스크립트의 동작 원리 (4) | 2021.02.04 |