순수함수에 대해 (불변성과 Side effect)

Haizel·2023년 5월 19일
1
post-thumbnail

기술 면접을 대비해 개념을 🍰 한입 크기로 잘라 정리합니다.
깃허브가 궁금하다면 놀러오세요!
👉 깃허브 보러가기 (Since 2023.05.10 ~ )

순수함수


순수함수란 함수 프로그래밍에서 자주 사용되는 개념으로, 2가지 조건을 모두 만족하는 함수를 말합니다.

첫째, 같은 입력 값에 대해 항상 동일한 출력 값을 반환하는 함수여야 합니다. 순수 함수는 입력 값이 변경되지 않는 한 항상 같은 결과 값을 반환하기 때문에 불변성을 유지합니다.

둘째, 함수 바깥 영역에 side effect, 즉 부수효과를 초래하지 않는 함수여야 합니다. 즉 함수 외부의 값이나 함수에 전달된 값을 변경하지 않는 함수를 말합니다.

/*<-- 순수 함수 -->*/
const a = (x, y) => x + y;
const b = (arr, value) => arr.concat(value);
const c = arr => [...arr].sort((a, b) => a - b);

/*<-- 순수 함수 ❌ -->*/
// 항상 같은 결과를 return 하지 않음
const a = (x, y) => x + y + Math.random(); 
// 전달받은 arr에 value를 넣어서 데이터를 변경함
const b = (arr, value) => (arr.push(value), arr); 
// arr를 정렬해서 순서가 바뀌게 함
const c = arr => arr.sort((a, b) => a - b);

💡 사이드 이펙트(Side effect)

의도치 않게 발생하는 예측할 수 없는 효과들을 말하며 대표적으로 외부 함수의 값이나 상태를 변경하는 것을 말합니다.

사이드 이펙트는 원래의 목적과 다르게 발생하기 때문에 사이드 이펙트가 발생하지 않도록 주의해야 합니다.

💡불변성

자바스크립트에서 순수함수를 제작하기 위해선 데이터의 불변성을 유지하는 것이 중요합니다. 이때 함수의 전달인자로 참조 자료형이 전달되는 경우, 의도치 않게 해당 객체 자체를 바꾸는 사이드 이펙트를 만들어 불변성을 손상시킬 수 있습니다. 때문에 배열의 불변성을 보장하는 메서드인 map, filter, ruduce와 같은 고차함수를 많이 사용합니다.

💡함수형 프로그래밍

순수함수로 사이드 이펙트(부수효과) 없이 불변성을 보장할 수 있는 프로그래밍 패러다임을 말합니다. 디버깅이 수월하다는 장점이 있습니다.

순수함수는 평가 시점이 무관하다는 특징을 가져 함수형 프로그래밍에서 효과적인 로직을 구성할 수 있도록 돕습니다.


순수 함수의 장점

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


📎 참고문서

profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글