함수형 프로그래밍

이종경·2024년 7월 24일
0

함수형 프로그래밍이란?

프로그래밍 패러다임의 하나로, 프로그램을 순수 함수의 조합으로 구현하는 방식이다.

함수형 프로그래밍은 변경 가능한 상태를 동시성 환경에서 처리하거나 예상치 못한 사이드 이펙트와 같은 전형적인 객체 지향 프로그래밍 문제들을 피하기 위해 노력한다.

함수형 프로그래밍의 특징

구체적인 작업 방식은 라이브러리가 결정하며, 어떻게(How)보다는 무엇(What)을 수행할 것인지에 집중한다.

함수형 프로그래밍에는 아래와 같은 특징이 존재한다.

  • 순수 함수
  • 참조 투명성
  • 불변성
  • 1급 객체

순수 함수(Pure Function)

부수 효과(Side Effect)를 제거한 함수로 계산함수라고도 한다.

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

function appendValue(arr, value) {
  let copy = [...arr]; // 불변성을 지키기 위해 복사하였다.
  copy.push(value)
  return copy; // 복사본을 리턴
}

부수효과(Side Effect)란?
함수가 실행되면서 발생하는 외부 상태의 변화로 구체적은 예시는 다음과 같다.

  • 변수 값 변경: 함수 내부에서 전역 변수나 함수 외부 변수의 값을 변경하는 경우
  • I/O 작업: 파일 읽기/쓰기, 네트워크 요청 등의 입출력 작업
  • 콘솔 출력: console.log() 등의 출력 작업
  • 예외 발생: 함수 실행 중 예외가 발생하는 경우

참조 투명성(Referential Transparency)

참조 투명성이란 함수가 동일한 입력에 대해 항상 동일한 출력을 반환하는 성질을 말한다.
다시 말해, 함수가 동일한 입력을 받으면 언제나 같은 결과를 반환해야 한다는 것이다. 이는 함수의 순수성(Purity)과 밀접한 관련이 있다.

불변성

불변성이란 데이터 구조나 객체의 상태가 생성 이후에 변경되지 않는 것을 의미한다.
특히 함수형 프로그래밍은 다음과 같은 이유로 불변성을 강조한다.

  • 예측 가능성 향상: 불변 데이터는 변경되지 않기 때문에 함수의 동작을 예측하기 쉽다.
  • 병렬 처리 용이: 불변 데이터는 여러 스레드에서 동시에 접근할 수 있어 병렬 처리에 유리하다.
  • 디버깅 용이: 불변 데이터는 변경 내역을 추적하기 쉬워 디버깅이 용이하다.
  • 참조 투명성 보장: 불변 데이터를 사용하면 함수의 참조 투명성(Referential Transparency)을 보장할 수 있다.

1급 객체

함수형 프로그래밍에서는 함수가 일급 객체(first-class citizen)의 역할을 한다.
함수를 일급 객체로 활용이 가능할 경우, 함수를 변수에 할당하거나, 인자로 받거나, 함수의 반환 값으로 활용하는 것이 가능하다.

참고
[면접 꿀팁] 함수형 프로그래밍이란?
Monad는 대체 무엇인가?
객체 지향 프로그래밍과 함수형 프로그래밍의 원칙 비교
[TIL] 함수형 프로그래밍
FP in JS (자바스크립트로 접해보는 함수형 프로그래밍)

profile
작은 성취들이 모여 큰 결과를 만든다고 믿으며, 꾸준함을 바탕으로 개발 역량을 키워가고 있습니다

0개의 댓글