본문 바로가기
language/javascript

🪄 순수 함수(Pure Function), 불변성(Immutability), 사이드 이펙트(Side Effect) 정리

by 죄니안죄니 2025. 5. 11.

🪄 순수 함수(Pure Function), 불변성(Immutability), 사이드 이펙트(Side Effect) 정리

함수형 프로그래밍을 이해하려면 반드시 알아야 할 세 가지 개념이 있습니다:
순수 함수, 불변성, 사이드 이펙트입니다.
이번 글에서는 이 세 개념을 각각 설명하고, 왜 중요한지, 어떻게 코드에 적용하는지를 실전 중심으로 정리합니다.


1. 순수 함수(Pure Function)란?

같은 입력에 대해 항상 같은 결과를 반환하고, 함수 외부 상태를 변경하지 않는 함수를 순수 함수라고 합니다.


// 순수 함수
function add(a, b) {
  return a + b;
}

// 비순수 함수 (외부 상태 변경)
let total = 0;
function addToTotal(n) {
  total += n; // ❌ 외부 상태를 변경함
}
✅ 순수 함수의 특징:
  • 입력값이 같으면 결과도 항상 같다
  • 외부 상태에 의존하거나 변경하지 않는다
  • 테스트 및 디버깅이 쉽다

2. 불변성(Immutability)이란?

데이터를 직접 수정하지 않고, 변경이 필요할 땐 복사본을 만들어 새로운 값을 생성하는 것을 의미합니다.


// 변경 가능한 방식 (mutable)
const user = { name: "Alice", age: 20 };
user.age = 21; // ❌ 원본이 바뀜

// 불변성 유지
const updatedUser = { ...user, age: 21 }; // ✅ 원본은 그대로
✅ 불변성의 장점:
  • 예측 가능한 코드 흐름
  • 상태 관리가 명확해짐 (특히 React, Redux 등에서 중요)
  • 디버깅과 리팩토링에 유리

3. 사이드 이펙트(Side Effect)란?

함수 내부에서 외부 상태를 변경하거나 외부에 영향을 주는 동작을 사이드 이펙트라고 합니다.


// 사이드 이펙트 예시
function saveUser(user) {
  database.save(user);     // 외부 시스템에 영향
  console.log("Saved!");   // 콘솔 출력도 사이드 이펙트
  alert("저장되었습니다!"); // UI 조작도 사이드 이펙트
}
❗ 주의할 점:
  • 모든 사이드 이펙트가 나쁜 것은 아니지만, 명확히 분리해서 제어하는 것이 중요
  • 가능하면 사이드 이펙트는 최소화하고, 외부에서 호출하는 방식으로 구성

4. 세 개념의 관계 요약

개념 설명 예시
순수 함수 동일 입력 → 동일 출력 + 외부 영향 없음 x => x * 2
불변성 기존 값을 수정하지 않고 복사/생성 { ...obj, updated: true }
사이드 이펙트 외부에 영향을 주는 동작 console.log(), API 호출

5. 실전 적용 예 – 상태 관리 함수 만들기


function updateUserName(user, newName) {
  return { ...user, name: newName }; // ✅ 순수 + 불변성 유지
}

const user = { name: "Alice", age: 25 };
const updated = updateUserName(user, "Bob");

console.log(user);   // 👉 { name: "Alice", age: 25 }
console.log(updated); // 👉 { name: "Bob", age: 25 }

📌 마무리

함수형 프로그래밍에서 순수 함수 + 불변성 + 사이드 이펙트 최소화는 기본 원칙입니다.
이러한 패턴은 코드의 예측 가능성, 유지보수성, 테스트 용이성을 크게 높여줍니다.
특히 React, Redux, RxJS와 같은 라이브러리에서도 이 개념이 핵심으로 활용됩니다.

다음 챕터에서는 ES6~2023까지의 최신 문법 정리로 넘어가며, let/const부터 optional chaining까지 핵심 기능을 한눈에 정리하겠습니다.

댓글