순수함수의 기본 개념

홍규진·2025년 4월 4일
post-thumbnail

순수함수의 기본 개념

프로그래밍 세계에는 때때로 혼돈과 복잡성이 가득합니다. 하지만 그 속에서도 순수하고 깨끗한 오아시스 같은 존재가 있습니다. 바로 순수함수입니다. 순수함수는 혼돈 속에서 한줄기 빛같이 청정지대를 만들어냅니다. 오늘은 이 순수함수에 대해 자세히 알아보겠습니다.

"(👨🏻‍🏫 : 여러분, 순수함수는 정말 정말 중요해요! 리엑트 내에서의 상태관리를 잘 한다는 것은 사실상 순수성을 유지하며 상태를 잘 관리하냐의 차이점이예요. 정말 유명한 상태관리 툴인 Redux는 Flux의 아이디어를 가장 충실하게 따르지만, 차이점은, 단일 스토어를 사용하고 그 스토어를 순수 함수인 리듀서라는 상태를 업데이트합니다. 즉, 리듀서를 알기 전에 순수함수부터 알아야 한답니다!)"

💡급하신 분들을 위해서 결론 먼저!

  1. 순수함수는 동일한 입력에 항상 동일한 출력을 반환하는 예측 가능한 함수다.
  2. 함수형 프로그래밍에서 순수함수는 코드의 안정성과 테스트 용이성을 높인다.
  3. 자바스크립트에서 순수함수와 비순수함수를 구별하는 것은 코드 품질 향상에 중요하다.

1. 순수함수란 무엇인가: 입력과 출력의 관계

순수함수의 정의

순수함수는 다음 두 가지 특성을 만족하는 함수를 말한다:

  1. 동일한 입력에 대해 항상 동일한 출력을 반환한다.
  2. 함수 외부의 상태를 변경하지 않는다(부수 효과가 없다).

"(👨🏻‍🏫 : 쉽게 말해서, 순수함수는 '착한 함수'예요. 항상 정직하게 같은 대답을 하고, 다른 것들을 건드리지 않죠!)"

순수함수의 예시

다음은 순수함수의 간단한 예시다:

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

이 함수는 항상 동일한 입력에 대해 동일한 출력을 반환하며, 외부 상태를 변경하지 않는다.

순수함수의 장점

  1. 예측 가능성: 동일한 입력에 항상 동일한 출력을 반환하므로 결과를 쉽게 예측할 수 있다.
  2. 테스트 용이성: 외부 의존성이 없어 단위 테스트가 쉽다.
  3. 병렬 처리: 부수 효과가 없어 병렬 처리에 안전하다.

2. 함수형 프로그래밍에서 순수함수의 중요성

함수형 프로그래밍의 핵심

함수형 프로그래밍에서 순수함수는 핵심적인 개념이다. 이 패러다임은 순수함수를 조합하여 프로그램을 구축하는 방식을 추구한다.

불변성과 순수함수

함수형 프로그래밍에서는 불변성(Immutability)을 중요하게 여긴다. 순수함수는 이 불변성 원칙을 자연스럽게 따르게 된다.

"(👨🏻‍🏫 : 불변성이란 한 번 만들어진 데이터는 변경되지 않는다는 뜻이에요. 불변성을 지키면 상태의 변화를 추적하기 쉬워지겠죠? 이는 디버깅과 애플리케이션의 동작 예측을 용이하게 합니다. 리액트는 상태나 props의 변화를 감지하여 리렌더링을 결정합니다. 불변성을 지키면 이전 상태와 새로운 상태를 명확히 구분할 수 있어, 리액트가 변화를 정확히 감지하고 필요한 경우에만 리렌더링을 수행할 수 있답니다.)

코드의 안정성 향상

순수함수를 사용하면 프로그램의 동작을 더 쉽게 이해하고 예측할 수 있다. 이는 전체적인 코드의 안정성을 높인다.

// 순수함수 예시 - 불변성 O
const pureIncrement = (num) => num + 1;

// 비순수함수 예시 - 불변성 X
let count = 0;
const impureIncrement = () => {
  count += 1;
  return count;
};

"(👨🏻‍🏫 : num이 바뀐다고 순수함수가 아닌 거 아냐? 라고 섣불리 판단하면 안돼요! 이 점이 매우매우 중요하답니다. impureIncrement는 이미 외부 변수 count 에 의해 영향을 받기도 하고(return), 동시에 주기도(count += 1) 합니다. 이를 보고 부수효과가 있다고 볼 수 있죠)


3. 자바스크립트에서 순수함수와 비순수함수 비교하기

순수함수의 예

자바스크립트에서 순수함수의 예는 다음과 같다:

const double = (x) => x * 2;
const sum = (a, b) => a + b;

비순수함수의 예

반면, 비순수함수의 예는 다음과 같다:

let total = 0;
const addToTotal = (value) => {
  total += value;
  return total;
};

순수함수와 비순수함수의 차이점

  1. 예측 가능성: 순수함수는 결과를 쉽게 예측할 수 있지만, 비순수함수는 그렇지 않다.
  2. 테스트: 순수함수는 테스트하기 쉽지만, 비순수함수는 외부 상태에 의존하므로 테스트가 복잡하다.
  3. 부수 효과: 순수함수는 부수 효과가 없지만, 비순수함수는 외부 상태를 변경할 수 있다.

"(👨🏻‍🏫 : 순수함수와 비순수함수를 구별하는 능력은 좋은 프로그래머가 되는 첫걸음이에요. 부수효과가 있는 코드는 몇 개만 쌓이더라도 예측 불가능하게 된답니다. 여러분도 연습해보세요! 다음엔 리액트에서의 순수성: 예측 가능한 UI의 비밀 에 대해서 배워볼게요)"


🙇🏻 글 내에 틀린 점, 오탈자, 비판, 공감 등 모두 적어주셔도 됩니다. 감사합니다..! 🙇🏻

profile
읽는 사람이 가장 이해하기 쉽게끔 적으려 노력합니다. 그 과정에서 스스로가 완전한 이해를 할 수 있다고 생각합니다. 그렇게 Taker 보다는 Giver이 되려 노력합니다.

0개의 댓글