순수 함수란 무엇인가? 함수형 프로그래밍의 핵심 개념
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

순수 함수란 무엇인가?

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • 소프트웨어 개발자 (특히 함수형 프로그래밍에 관심 있는 중급 이상 개발자)
  • 난이도: 중간 (기초 개념 설명과 실무 예시 포함)

핵심 요약

  • 순수 함수의 3대 규칙:
  • 항상 단일 값 반환 (예: static int increment(int x) { return x + 1; })
  • 입력만 의존 (예: static int add(int a, int b) { return a + b; })
  • 외부 상태 변형 금지 (예: public static User addTag(User user, String tag) { ... })
  • 장점: 테스트 용이성, 예측 가능성, 병렬 처리 효율성
  • 성능 트레이드오프: 불변성 유지 시 복사 비용 발생 (예: Java에서 new ArrayList<>(user.tags) 사용)

섹션별 세부 요약

1. 함수형 프로그래밍의 핵심 개념

  • 자기 밀폐된 함수 설계: 입력값에만 의존하며, 외부 상태 영향 없음
  • 재사용성: 동일한 입력에 대해 동일한 출력을 보장해 모듈 간 공유 가능
  • 테스트 용이성: 사이드 이펙트 없음으로 단위 테스트 간단

2. 순수 함수의 정의와 규칙

  • 규칙 1: 동일한 입력값에 대해 항상 동일한 출력값 생성 (예: Math.random()은 비순수)
  • 규칙 2: 외부 변수/시스템 상태와 무관하게 계산 (예: static int add(int a, int b)는 순수)
  • 규칙 3: 외부 데이터 변형 금지 (예: user.tags.add(tag)는 비순수, 대신 새 객체 생성)

3. 실무 예시와 트레이드오프

  • 순수 함수 예시:

```java

public static int calculateTotalPrice(int pricePerItem, int quantity, int discountPercent) {

int total = pricePerItem * quantity;

int discount = total * discountPercent / 100;

return total - discount;

}

```

  • 성능 고려사항:
  • 대규모 데이터 처리 시 불변성 유지로 인한 복사 비용 발생
  • JavaScript/Scala는 불변 컬렉션 기본 제공, Java는 수동 복사 필요

4. 순수 함수의 한계와 적용 시 고려사항

  • 비순수 함수의 필요성: 성능 최적화를 위해 일부 경우 변형 허용
  • 언어별 차이: Java는 불변성 유지 위해 수동 복사 필요, Scala/JavaScript는 기본 제공

결론

  • 실무 팁: 순수 함수를 사용할 때는 성능 트레이드오프를 고려하고, 불변성 유지가 필수적임
  • 예시: List doubleAllValues(List numbers) 함수에서 새로운 리스트 생성해 원본 변경 방지
  • 핵심: 순수 함수는 예측성과 테스트 용이성을 제공하지만, 성능과 언어 특성에 따라 적용 전략을 조정해야 함