순수함수와 불변성과 사이드 이펙트

담당
황찬우
완료
완료
유형
Frontend
비고

요약


 
Q : 순수함수불변성사이드 이펙트와 연결하여 설명해주세요
A : 순수함수란 입력값에 대해 항상 동일한 출력값을 반환하는 함수로, 외부상태에 영향을 끼치는 사이드 이펙트가 없는 함수를 의미합니다. 순수함수는 입력값만을 가지고 처리하기 때문에 입력값이 변경되지 않는 한 항상 같은 결과를 반환하므로 불변성을 유지합니다. 순수함수를 제작하기 위해서는 데이터의 불변성을 유지하는 것이 중요한데, 전달인자로 참조 자료형이 전달되는 경우 객체 자체를 바꾸는 사이드이펙트가 생길 수 있어 map filter reduce메소드가 각광받게 되었습니다.
 

순수함수(Pure Functions)


순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 외부 상태를 변경하지 않는 함수를 말한다. 즉, 함수 내부에서 어떤 값이 변경되지 않으며, 외부에서 관찰 가능한 상태에도 영향을 주지 않는 함수다.
  • input : 어떠한 함수에서 외부의 데이터를 직접적으로 사용하지 않고, 파라미터로 받습니다.
  • output : input값에 의해 output이 결정되기 때문에 외부의 값들이 변경되더라도 함수 자체에는 외부에 영향을 받지 않기 때문에 Side-Effect가 없다는 것입니다.
 

순수 함수의 장점

  • 순수 함수는 불변성을 유지하기 때문에 코드의 예측 가능성과 안정성을 높여준다.
  • 함수를 호출하면 항상 동일한 결과를 반환하기 때문에, 함수를 디버깅하거나 테스트하기 쉬워진다.
  • 순수 함수는 병렬 처리와 메모이제이션 등을 적용하기 쉬워 성능을 향상시키는데 도움을 준다.
 

사이드 이펙트

  • 함수나 프로그램이 외부 환경에 영향을 미치는 동작을 말합니다.
  • 외부 상태 변경, 예측할 수 없는 결과를 초래하는 동작이 포함됩니다.
  • 순수 함수와 불변성을 통해 사이드 이펙트를 최소화하고 코드를 예측 가능하게 만듭니다.
 

불변성

  • 데이터가 한 번 생성되면 변경할 수 없는 상태를 의미합니다.
  • 불변성을 갖는 데이터 구조는 데이터 변경을 추적하기 쉽고 안정적인 코드 작성을 도와줍니다.
  • 함수형 프로그래밍에서 불변성은 기본 원칙 중 하나입니다.
 

pure methods

순수 함수 메서드는 원본 배열을 변경하지 않고 새로운 배열을 반환한다.
  • Array.map(): 배열의 모든 요소에 대해 주어진 함수를 호출한 결과를 모은 새로운 배열을 반환
  • Array.reduce(): 배열의 요소를 순회하며 각 요소에 대해 주어진 콜백 함수를 호출하고 그 결과값을 누적시켜 최종 결과값을 반환
  • Array.find(): 주어진 조건에 부합하는 첫 번째 요소를 반환하거나, 조건에 부합하는 요소가 없을 경우 undefined를 반환
  • Array.filter(): 배열의 모든 요소에 대해 주어진 함수를 호출하여, 반환값이 true인 요소로만 이루어진 새로운 배열을 반환
  • Array.concat(): 두 개 이상의 배열을 결합하여 새로운 배열을 반환
  • Array.slice(): 배열의 일부분을 선택하여 새로운 배열을 반환

impure methods

비순수 함수 메서드는 원본 배열을 변경한다.
  • Array.push(): 배열의 끝에 하나 이상의 요소를 추가
  • Array.pop(): 배열의 끝에서 요소를 제거하고 반환
  • Array.splice(): 배열의 일부분을 선택하여 제거하거나, 새로운 요소를 추가
  • Array.sort(): 배열의 요소를 정렬함. 이 때, 원본 배열이 변경됨
  • Date.now(): 현재 시간을 밀리초 단위로 나타내는 숫자를 반환
  • Math.random(): 0 이상 1 미만의 난수를 생성하고 반환
 

참고 사이트