꼬꼬마 블로그

꼬꼬마의 기술 블로그

어제 프론트엔드 직군에서 면접의 질문 중 대답하지 못했던 순수함수에 대한 글을 작성해보겠습니다.

순수함수

순수함수는 아래의 두가지 특성을 가지는 함수입니다.

1. 함수 외부의 어떤 데이터도 변경시키지 않는 함수
2. 동일한 입력에 항상 동일한 출력을 하는 함수

No Side Effect

위의 예제와 같이 addItem 함수는 addItem함수는 인자로 받은 외부의 array 배열의 요소를 직접 변경합니다.
이로 인해 함수의 밖에서 선언된 array 배열의 값이 변경되었습니다. 이러한 함수는 순수함수 라고 부르지 않는다.

 

위의 addItem함수를 순수함수로 아래와 같이 순수함수로 만들 수 있습니다.

위와 같이 인자로 받은 배열은 깊은 복사를 통해 함수에서 값이 변해도 외부에 영향을 주지 않도록 합니다.


(만약 spread 연산자가 아직 완전히 깊은 복사를 한다고 생각하시는 분은 아래의 글을 추천드립니다)

 

[JS] 전개(spread)는 완전히 깊은 복사일까?

ES6의 전개 (spread 연산자)를 통해 손쉽게 깊은 복사를 할 수 있습니다. 하지만 과연 전개는 완전히 깊은 복사일까요? 오늘은 전개가 완전히 깊은 복사가 아닌 경우와 그에 따른 해결방법을 글에

wlswoo.tistory.com

동일한 입력, 동일한 출력

위의 경우 sum 함수가 항상 같은 입력에 같은 결과를 반환할 것 같지만 변수 a 가 변함에 따라 다른 결과를 반환하기에 순수함수가 아닙니다

 

 

왜 순수함수?

물론 모든 함수가 순수할 순 없습니다. 하지만 이런 순수함수들을 적극적으로 활용하여 버그의 발생 가능성을 줄이며 개발하는 패러다임을 함수형 프로그래밍이라고 합니다.

 

함수형 프로그래밍 기법은 다음에 더 자세히 다뤄보겠습니다.