함수형 프로그래밍

기술노트
Admin (토론 | 기여)님의 2025년 9월 6일 (토) 05:05 판 (Gemini 벌크 업로더로 자동 업로드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

λ 함수형 프로그래밍 (Functional Programming)

함수형 프로그래밍은 프로그램을 순수 함수(Pure Function)들의 조합으로 보고, 데이터의 상태 변화나 가변적인 데이터를 피하는 프로그래밍 패러다임입니다. 명령형 프로그래밍이 '어떻게(How)' 할 것인지를 순서대로 나열한다면, 함수형 프로그래밍은 '무엇(What)'을 할 것인지를 선언적으로 표현합니다.


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

  • 순수 함수 (Pure Function) : 동일한 입력에 대해 항상 동일한 출력을 반환하고, 함수 외부의 상태를 변경하는 '부수 효과(Side Effect)'가 없는 함수입니다. 코드의 동작을 예측하기 쉽고 테스트하기 용이합니다.
  • 불변성 (Immutability) : 데이터가 생성된 후에 그 상태를 변경할 수 없는 것을 의미합니다. 데이터가 변경될 때는 새로운 데이터를 만드는 방식으로 처리하여, 예기치 않은 상태 변경으로 인한 버그를 방지합니다.
  • 1급 객체로서의 함수 (First-class Citizen) : 함수를 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 함수의 결과로 반환할 수 있습니다. 이를 통해 함수를 자유롭게 조합하고 활용할 수 있습니다.
  • 고차 함수 (Higher-order Function) : 다른 함수를 인자로 받거나, 함수를 결과로 반환하는 함수입니다. (예: `map`, `filter`, `reduce`)

🤔 왜 함수형 프로그래밍을 사용하는가?

함수형 프로그래밍은 부수 효과와 상태 변경을 최소화하므로, 코드의 동작을 이해하고 예측하기가 매우 쉽습니다. 특히 여러 스레드가 동시에 공유 자원에 접근하는 멀티스레드 환경에서 동기화 문제 없이 안전하게 코드를 작성하는 데 매우 유리합니다.

또한, 복잡한 로직을 간결하고 선언적으로 표현할 수 있어 코드의 가독성과 생산성을 높일 수 있습니다.


💡 개발자 핵심 Point

  • Java 8의 스트림 API, JavaScript의 배열 헬퍼 메서드(`map`, `filter` 등), Python의 리스트 컴프리헨션 등 현대적인 프로그래밍 언어들은 함수형 프로그래밍의 특징을 대거 도입하고 있습니다.
  • 람다(Lambda)클로저(Closure)는 함수형 프로그래밍을 가능하게 하는 핵심적인 언어 기능입니다.
  • 순수 함수는 입력과 출력만 고려하면 되므로, 단위 테스트(Unit Test)를 작성하기가 매우 쉽습니다.
  • 모든 것을 함수형으로 작성할 필요는 없습니다. 객체 지향 프로그래밍과 함수형 프로그래밍의 장점을 이해하고, 상황에 맞게 두 패러다임을 조화롭게 사용하는 것이 좋습니다.