순수함수와 불순함수

eeensu·2023년 11월 14일
0

용어 정리와 팁

목록 보기
15/26
post-thumbnail

순수함수

순수함수란 입력값과 출력값의 형태가 동일한 구조인 함수를 뜻한다. 즉, 함수 내부에서 지역변수 또는 전역변수를 수정하지 않고 예측 가능하도록 동작해야 한다. 예시는 아래와 같다.

function add(a, b) {
    return a + b;
}



불순함수

순수함수의 규칙을 벗어난 함수를 뜻한다. 아래와 같이 외부의 변수를 변경하면서, 같은 입력에 대해 다른 반환값을 리턴한다.

let counter = 0;

function incrementCounter() {
    counter++;
    return counter;
}


순수함수의 요건

  • 입력 매개변수의 값을 변경하면 안 된다.
  • 만들어진 결과값을 즉시 리턴해야한다.
  • Promise와 같은 비동기 로직을 사용하면 안된다.
  • 예외처리를 일으키지 않아야 한다.
  • 콜백함수로 구현되어 있거나, 콜백을 실행하는 구조로 이루어지지 않아야 한다.


순수함수의 장점

  • 예측 가능성과 안정
    순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하므로 코드의 예측 가능성이 높아지고 안정성이 향상된다.

  • 테스트 용이성
    외부 상태에 의존하지 않고 입력만을 기반으로 결과를 생성하는 순수 함수는 테스트가 용이하며 코드 품질을 높일 수 있다.

  • 부작용 최소화
    외부 상태에 의존하지 않아 부작용이 최소화되어 코드의 안정성이 향상되고 디버깅이 쉬워진다.



부작용 (Side Effect)

부작용은 함수의 실행 결과로서, 함수 외부의 환경을 변경하는 것을 뜻한다. 파일 쓰기, 데이터베이스 수정, 화면 출력 등이 부작용의 예이다. 순수 함수는 부작용이 없는 반면, 불순함수는 부작용을 포함할 수도 있고, 아닐 수도 있다. 부작용은 코드의 예측성이 점점 더 낮아지며, 이로 인해 디버깅이 어려워질 수 있다.


javascript와 같은 함수형 프로그래밍에서는 불순 함수를 최소화하면서 순수 함수를 많이 사용하며 개발하는 것이 권장된다. 하지만 어떤 프로그래밍이든 부작용은 불가피하지만, 이를 잘 관리하여 안정적이고 예측 가능한 코드를 작성하는 것을 추구해야한다.

profile
안녕하세요! 26살 프론트엔드 개발자입니다! (2024/03 ~)

0개의 댓글