1. 함수형 프로그래밍
0) 들어가기 전
(1) 프로그래밍 패러다임(Programming Paradigm)
프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 이러한 프로그래밍 패러다임은 다음과 같이 크게 두 가지로 나눌 수 있다.
- 명령형 프로그래밍 : 무엇(What)을 할 것인지를 나타내기보다 어떻게(How) 할 건지를 설명하는 방식
- 절차지향 프로그래밍 : 수행되어야 할 순차적인 처리 과정을 포함하는 방식(C, C++)
- 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현(C++, Java, C#)
- 선언형 프로그래밍 : 어떻게(How) 할 건인가 보다는 무엇(What)을 할 것인가를 설명하는 방식
- 함수형 프로그래밍 : 순수 함수를 조합하고 소프트웨어를 만드는 방식(클로저, 하스켈, 리스프)
함수형 프로그래밍은 초창기부터 소프트웨어 개발의 한 흐름이었지만, 오늘날 중요성이 더욱 커짐
1) 함수형 프로그래밍이란
함수형 프로그래밍이란?
- 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나
- Robert C.Martin은 함수형 프로그래밍을 대입문이 없는 프로그래밍이라고 정의
- 대표적인 언어로는 SQL, Scala,Clojure 등이 존재
(1) 함수형 프로그래밍의 특징
- 순수 함수(Pure function)
- 부수 효과가 없는 함수
- 함수의 실행이 외부에 영향을 끼치지 않는 함수
- 같은 입력에 있어서 항상 동일한 출력을 가짐
부수 효과란?
- 콘솔에 출력하거나 사용자의 입력을 읽는 것
- 변수를 수정하거나, 객체의 필드를 저장하는 것
- 예외를 던지거나 오류를 발생시키며 실행을 중단하는 것
- 파일에 읽고 쓰는 작업
- 참조 투명성(Referential transparency)
- 프로그램의 변경 없이 어떤 표현식을 값으로 대체할 수 있다는 의미
- 불변성(Immutable)
- 함수 외부에서 데이터를 수정하지 않음
- 함수의 계산을 수행하는 동안 변수에 할당된 값들이 절대로 변하지 않음
- 일급 객체(First object)
- 변수나 자료 구조안에 삽입 가능
- 파라미터, 리턴 값으로 사용 가능
- 동적으로 property 할당 가능
5, 고차 함수(High order function)
- 함수를 다루는 함수로 함수의 인자 또는 리턴 값으로 함수 사용 가능
- 익명 함수(Anonymous function)
- 이름이 없는 함수
- 람다식으로 표현되는 함수 구현
- 게으른 평가(Lazy evaluation)
- 코드 실행 즉시 값을 평가하는 것이 아닌 필요한 시점에 평가
(2) 함수형 프로그래밍의 장점
- 사용하는 모든 데이터가 변경 불가능하고 부수 효과를 가지지 않기 때문에 동시성과 관련된 문제를 원천적으로 차단
- 테스트가 쉽고 가독성이 좋음
- 코드 재사용성이 높음
- 깔끔하고 유지보수에 용이
(2) 함수형 프로그래밍의 한계
- 함수형 프로그래밍의 개념은 이해하기 쉽지 않음
- 프로그래밍을 진행하며 수 많은 함수들을 파악하고 유지 관리하기 힘들어짐
- 광범위한 환경 설정이 필요할 수 있음
- 꾸준한 리팩토링이 필요할 수 있음
참고 자료
[개발상식] 함수형 프로그래밍이란?
함수형 프로그래밍(Functional Programming)이란? 함수형 프로그래밍의 특징과 장점, 한계
[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?