Software Engineering
Functional Programming
by orioncsy
2023. 5. 17.
Functional Programming
개념
함수형 프로그래밍
- 자료처리를 함수의 계산으로 취급하고 상태와 가변 데이터를 피하는 프로그래밍
- 명령형 프로그래밍과 대조되는 선언형 프로그래밍 패러다임을 따른다.
프로그래밍 패러다임
명령형 프로그래밍
- 상태를 변경하는 관점을 강조하는 방식
- 어떻게 프로그래밍할 것인지를 설명하는 방식
- 객체 지향
- 절차 지향
선언형 프로그래밍
- 어떻게 할 것인지 보다 무엇을 할 것이지를 설명하는 방식
- 함수형 프로그래밍
함수형 프로그래밍
등장 배경
- 명령형 프로그래밍에서 복잡한 코드의 가독성과 유지보수를 위해 고안
- 모든 문제를 순수함수로 나누어 문제를 해결하는 방식
개념 이해
- 대입문을 사용하지 않는 프로그래밍
- 작은 문제를 해결하기 위한 함수 작성
- 무엇을 하는지가 중요하기 때문에 출력하는 함수를 파라미터로 넘길 수 있다.
특징
- 부수효과가 없는 순수 함수를 1급 객체로 파라미터나 반환값으로 사용할 수 있고 참조 투명성을 유지한다.
- 부수 효과
- 변수 값 변경
- 자료 구조를 제자리 수정
- 객체의 필드 값 설정
- 예외나 오류로 실행 중단
- 콘솔이나 I/O 발생
- 순수 함수
- 부수 효과들을 제거한 함수
- 함수의 실행이 외부에 영향을 끼치지 않는 경우
- 메모리나 I/O의 관점에 부수 효과가 없는 경우
- 함수가 독립적이라서 스레드 안정성을 보장받아 병렬처리를 동기화 없이 가능
- 1급 객체
- 변수나 데이터 구조 안에 담을 수 있다.
- 파라미터로 전달 가능
- 반환값 사용 가능
- 할당에 사용된 이름과 무관하게 고유한 식별 가능
- 참조 투명성
- 동일한 인자에 대해 항상 동일한 결과를 반환
- 기존 값은 변경되지 않고 유지
- 부수 효과를 제거하여 항상 동일한 결과를 반환하고 기존의 값은 변경하지 않는다.
- 병렬 처리 환경에서 값의 대입 없이 동일한 실행에 대해 동일한 결과를 반환
활용
- 자바에서는 streamAPI를 통해 함수형 프로그래밍을 실현할 수 있다.
- 지역변수를 없애고 부수 효과를 제거하여 병렬처리가 용이하고 가독성이 뛰어나다.
- 그러나 for문 같은 명령형 프로그래밍에 비해 속도 측면에서는 상대적으로 불리하다.
- 함수 자체를 파라미터로 전달하면서 오버헤드 발생
Reference
https://mangkyu.tistory.com/111