코틀린으로 배우는 함수형 프로그래밍 - 1장 함수형 프로그래밍이란?
범위
- 1장 함수형 프로그래밍이란?
요약
- 함수형 프로그래밍의 특징은 다음과 같다.
- 불변성(immutable)
- 참조 투명성(referential transparency)
- 일급 함수(first-class function)
- 게으른 평가(lazy evaluation)
개념 정리
- 함수형 프로그래밍(functional programming, FP): 함수를 사용해서 데이터 처리의 참조 투명성을 보장하고 상태와 가변 데이터 생성을 피하는 프로그래밍 패러다임.
- 순수한 함수(pure function): 부수 효과가 없는 함수, 즉, 함수의 실행이 외부에 영향을 끼치지 않는 함수를 뜻한다.
- 부수효과(side-effect): 함수가 실행되는 과정에서 외부의 상태(데이터)를 사용 또는 수정하는 것. 함수의 반환값이 아닌, 외부의 상태에 영향을 미치는 것.
- 참조 투명성(referential transparency): 프로그램의 변경 없이 어떤 표현식을 값으로 대체할 수 있다는 뜻.
- 일급 객체(first-class object): 다음 세가지 조건을 만족시키는 객체.
- 객체를 함수의 매개변수로 넘길 수 있다.
- 객체를 함수의 반환값으로 돌려 줄 수 있다.
- 객체를 변수나 자료구조에 감을 수 있다.
- 일급 함수(first-class funtion): 다음 조건들을 만족하는 함수.
- 함수를 함수의 매개변수로 넘길 수 있다.
- 함수를 함수의 반환값으로 돌려줄 수 있다.
- 함수를 변수나 자료구조에 담을 수 있다.
- 게으른 평가(lazy evaluation): 계산의 결과값이 필요할 때까지 계산을 늦추는 기법.
책에서 기억하고 싶은 내용
- 1.1 함수형 프로그래밍의 특징
- 함수형 프로그래밍(functional programming, FP)은 함수를 사용해서 데이터 처리의 참조 투명성을 보장하고 상태와 가변 데이터 생성을 피하는 프로그래밍 패러다임이다.
- 함수형 프로그래밍의 특징은 다음과 같다.
- 불변성(immutable)
- 참조 투명성(referential transparency)
- 일급 함수(first-class function)
- 게으른 평가(lazy evaluation)
- 함수형 프로그래밍으로 프로그램을 개발하면 다음과 같이 여러 이점이 있다.
- 부수효과가 없는 프로그램을 만들 수 있어 동시성 프로그래밍에 적합하다.
- 코드의 복잡도가 낮아 간결한 코드를 만들 수 있고, 모듈성이 높아져 유지보수하기 쉽다.
- 프로그램의 예측성을 높여 컴파일러가 효율적으로 실행되는 코드를 만들어준다.
- 1.2 순수한 함수란 무엇인가?
- 순수한 함수(pure function)란, 부작용(side-effect)이 없는 함수, 즉, 함수의 실행이 외부에 영향을 끼치지 않는 함수를 뜻한다. 따라서 순수한 함수는 스레드 안전하고, 병렬적인 계산이 가능하다.[함수형 프로그래밍]
- 순수한 함수에는 다름과 같은 특징이 있다.
- 동일한 입력으로 실행하면 동일한 결과가 나온다.
- 부수효과가 없다.
- 부수효과란 함수가 실행되는 과정에서 외부의 상태(데이터)를 사용 또는 수정하는 걸 말한다.
- 순수한 함수의 특징 덕에 참조 투명성(referential transparency)을 만족하게 된다.
- 1.3 부수효과 없는 프로그램 작성하기
- 부수효과는 함수의 반환값이 아닌, 외부의 상태에 영향을 미치는 것을 말한다.
- 1.4 참조 투명성으로 프로그램을 더 안전하게 만들기
- 참조 투명성이란, 프로그램의 변경 없이 어떤 표현식을 값으로 대체할 수 있다는 뜻이다.
- 참조 투명성은 프로그래머나 컴파일러가 평가 결과를 추론할 수 있게 한다. 그래서 프로그램이 실행되기 전에 컴파일러가 코드를 최적화하거나 코드가 평가되는 시점을 늦출 수 있다.
- 1.5 일급 함수란?
- 일급 객체(first-class object)
- 일급 객체는 다음 세가지 조건을 만족시키는 객체를 의미한다.
- 객체를 함수의 매개변수로 넘길 수 있다.
- 객체를 함수의 반환값으로 돌려 줄 수 있다.
- 객체를 변수나 자료구조에 감을 수 있다.
- 일급 객체는 다음 세가지 조건을 만족시키는 객체를 의미한다.
- 일급 함수(first-class funtion)
- 다음 조건들을 만족하는 함수는 일급 함수라고 할 수 있다.
- 함수를 함수의 매개변수로 넘길 수 있다.
- 함수를 함수의 반환값으로 돌려줄 수 있다.
- 함수를 변수나 자료구조에 담을 수 있다.
- 일급 함수를 통해서 더 높은 추상화가 가능하고, 코드의 재사용성을 높일 수 있다.
- 다음 조건들을 만족하는 함수는 일급 함수라고 할 수 있다.
- 일급 객체(first-class object)
- 1.6 일급 함수를 이용한 추상화와 재사용성 높이기
- 1.7 게으른 평가로 무한 자료구조 만들기
- 느긋한 계산법(Lazy evaluation)은 계산의 결과값이 필요할 때까지 계산을 늦추는 기법이다.[느긋한 계산법]
- 함수형 언어는 기본적으로 값이 필요한 시점에 평가(lazy evaluation)되고 프로그래머가 평가 시점을 지정할 수도 있다.
- by lazy는 여러 번 호출되더라도 최초 에 한 번만 평가를 실행한다. 그리고 내부적으로 결괏값을 저장해 두고 필요할 때 가져온다.
- 함수형 언어에서는 게으른 평가라는 특성을 활용하여 무한대 값을 자료구조에 저장할 수 있다.
lazy evaluation | eager evaluation | |||||
---|---|---|---|---|---|---|
code |
|
| ||||
output |
|
|
Reference
This post is licensed under CC BY 4.0 by the author.