개요
정의
- 선언형 프로그래밍(declarative programming)이란 ‘무엇을’ 풀어내는가에 집중하는 패러다임
- 함수형 프로그래밍(functional programming)은 선언형 패러다임의 일종
- 명령형과 함수형에서 사용하는 함수는 부수효과의 유무에 따라 차이가 있음
- 대입문이 없는 프로그래밍 방식으로, 작은 문제를 해결하기 위한 함수를 작성함
- 작은 ‘순수 함수’들을 블록처럼 쌓아 로직을 구현하고 ‘고차 함수’를 통해 재사용성을 높인 프로그래밍 패러다임
장점
- 더 나은 모듈화와 짧은 코드를 제공하여 함수 단위의 코드 재사용이 수월함
- 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬움 → 테스트와 디버깅이 용이함
- 가독성이 높은 코드를 작성하기 쉬움
- 부수효과를 제거할 수 있음
단점
- 함수형 프로그래밍의 개념을 이해하기가 쉽지 않음
- 프로그래밍을 진행하며 수 많은 함수들을 파악하고 유지 관리하기 힘들어짐
- 광범위한 환경 설정이 필요할 수 있음
- 함수가 많아질수록 함수를 조합하기 복잡해지며 꾸준한 리팩터링이 필요할 수 있음
- 반복이 for문이 아닌 재귀를 통해 이루어지는데, 재귀적 코드 스타일은 무한 루프에 빠질 수 있음
특징
부수 효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있음
부수 효과(Side Effect)
- 부수효과란 다음과 같은 변화 또는 변화가 발생하는 작업을 의미
- 변수의 값이 변경됨
- 자료 구조를 제자리에서 수정함
- 객체의 필드값을 설정함
- 예외나 오류가 발생하며 실행이 중단됨
- 콘솔 또는 파일 I/O가 발생함
순수 함수(Pure Function)
const pure = (a, b) => {
return a + b
}
- 위와 같은 부수 효과를 제거한 함수로, 출력이 입력에만 의존함
- 만약 다른 전역 변수가 출력에 영향을 주면 더이상 순수 함수가 아니게 됨
- 장점
- 함수 자체가 독립적이며 side effect가 없으므로 Thread에 안정성을 보장받음
- thread-safe하여 병렬 처리를 동기화없이 진행 가능
- 프로그램의 변화 없이 입력 값에 대한 결과를 예상할 수 있어 테스트가 용이함
고차 함수(Higher Order Function)
- 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것
- 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 함
1급 객체(First-Class Object)
- 일급 객체란 다음이 가능한 객체
- 변수나 메서드에 함수를 할당할 수 있음
- 함수 안에 함수를 매개변수로 담을 수 있음
- 함수가 함수를 반환할 수 있음
- 함수형 프로그래밍에서 함수는 1급 객체로 취급받기 때문에 함수를 파라미터로 넘기는 등의 작업이 가능
참조 투명성(Referential Transparency)
- 동일한 인자에 대해 항상 동일한 결과를 반환해야 함
- 참조 투명성을 통해 기존의 값은 변경되지 않고 유지됨
References
'Computer Science > 프로그래밍 패러다임' 카테고리의 다른 글
[프로그래밍 패러다임] 프로그래밍 패러다임이란? (0) | 2023.01.20 |
---|---|
[프로그래밍 패러다임] 객체지향 프로그래밍(Object-Oriented Programming) (0) | 2023.01.20 |
[프로그래밍 패러다임] 절차지향 프로그래밍(Procedural Programming) (0) | 2023.01.20 |