함수형 프로그래밍이란?
함수형 프로그래밍(Functional Programming)은 순수 함수와 불변 데이터를 중심으로 프로그램을 구성하는 패러다임입니다. 정보처리기사 시험에서는 순수 함수, 불변성, 고차 함수, 함수 합성, 모나드가 핵심 출제 범위입니다.
핵심 개념
- 순수 함수(Pure Function): 동일 입력에 항상 동일 출력. 부작용(Side Effect) 없음. 참조 투명성(Referential Transparency) 보장
- 불변성(Immutability): 데이터 생성 후 변경 불가. 새로운 값을 생성. 동시성 문제 해결
- 일급 함수(First-class Function): 함수를 값처럼 취급. 변수에 할당, 인자로 전달, 반환값으로 사용
- 고차 함수(Higher-order Function): 함수를 인자로 받거나 함수를 반환하는 함수. map, filter, reduce
함수 합성과 커링
- 함수 합성(Function Composition): 여러 함수를 연결. f(g(x)) = (f o g)(x). 왼쪽에서 오른쪽 합성은 pipe()
- 커링(Currying): 다인수 함수를 단인수 함수의 체인으로 변환. add(1)(2) 형태
- 부분 적용(Partial Application): 함수의 일부 인자를 미리 고정해 새 함수 생성
- 클로저(Closure): 외부 변수를 캡처하는 함수. 상태를 함수로 캡슐화
모나드(Monad)
부작용을 순수 함수형 방식으로 처리하는 추상화입니다.
- Maybe Monad: null/undefined 처리. 값이 있으면 계속 처리, 없으면 건너뜀
- Either Monad: 성공(Right) 또는 실패(Left). 에러 처리를 타입으로 표현
- Promise: JavaScript의 비동기 모나드. then/catch 체이닝
- 세 가지 법칙: 좌동일원, 우동일원, 결합법칙
함수형 언어와 언어별 지원
- 하스켈(Haskell): 순수 함수형 언어. 강한 타입 시스템, 지연 평가(Lazy Evaluation)
- 스칼라(Scala): JVM 기반 함수형 + OOP 혼합
- JavaScript/TypeScript: 고차 함수, 클로저, 불변성 라이브러리(Immutable.js, Ramda)
- Python: map/filter/reduce, functools, lambda
정보처리기사 기출 핵심 정리
- 순수 함수 = 동일 입력 → 동일 출력 + 부작용 없음
- 고차 함수 = 함수를 인자로 받거나 반환. map/filter/reduce
- 커링 = 다인수 함수를 단인수 함수 체인으로 변환
- 모나드 = 부작용 처리 추상화. Maybe(null처리), Either(에러처리)
- 참조 투명성 = 함수 호출을 결과값으로 교체 가능