티스토리 뷰
코틀린은 객체지향 프로그래밍과 함수형 프로그래밍이 가능한 다중 패러다임 언어이다.
다중 패러다임 프로그래밍 언어(multiparadigm programming language)는 하나 이상의 프로그래밍 패러다임을 지원하는 프로그래밍 언어이다. 이것은 비야네 스트롭스트룹이 설명하는, “하나 이상의 프로그래밍 스타일을 따르는 프로그램”을 허용한다. 이런 언어들의 설계 목표는 모든 문제를 가장 쉽고 효율적으로 풀 수 있는 하나의 패러다임은 없다는 것을 인정하고, 프로그래머가 자신의 일에 가장 적합한 것을 사용할 수 있게 하는 것이다.
- 출처 위키백과-
함수형 프로그래밍이라고 하면 순수 함수를 사용하여 프로그램의 부작용(side effect)를 줄이는 프로그램 기법을 말한다.
그리고 함수형 프로그래밍에서는 람다식과 고차 함수를 사용한다.
순수함수란?
순수 함수란 부수 효과 (side effect)가 없는 함수이다. 여기서 말하는 부수 효과란 외부 상태를 변경하거나 함수의 인자로 들어온 값을 변경하는 것을 말한다. 이것 저것 말을 합쳐보면 순수함수란 외부의 상태를 바꾸지 않는 함수이고 같은 인자에 대하여 항상 같은 값을 반환하는 함수이다.
순수 함수의 조건
- 같은 인자에 대하여 항상 같은 값을 반환한다.
- 함수 외부의 어떤 상태도 바꾸지 않는다.
간단한 순수 함수의 코드 예
//순수 함수의 예
fun sum(a: Int, b: Int): Int {
return a+b //동일한 인자인 a,b를 입력받아 항상 a+b를 출력한다.
}
위의 예제는 인자 2개를 받아서 덧셈 연산을 하고 그 결괏값을 반환하는 함수이다. 이 함수를 살펴보면 외부의 어떤 상태(외부의 변수)도 바꾸지 않고 똑같은 값을 입력했을 경우 반환 값도 항상 같은 순수 함수이다.
여기서 헷갈리는 게 똑같은 값을 입력했을 경우 반환 값도 같다는 것은 sum(1,2)를 호출하면 항상 1,2의 덧셈에 대한 결괏값 3을 반환한다는 이야기이다.
일급 객체란?
함수형 프로그래밍에서는 함수를 일급 객체로 생각한다.
일급 객체(First Class Citizen)의 특징
- 일급 객체는 함수의 인자로 전달할 수 있다.
- 일급 객체는 함수의 반환 값에 사용할 수 있다.
- 일급 객체는 함수를 변수에 담을 수 있다.
함수가 일급 객체면 일급 함수라고 하는데 이 일급 함수에 이름이 없으면 람다식이라고 부른다.
즉 람다식은 일급 객체의 특징을 가진 이름 없는 함수이다.
고차 함수란?
고차 함수(High-order Function)이란 함수를 인자로 사용하거나 함수를 결괏값으로 반환하는 함수를 말한다.
fun main(){
println(highFunc({x, y -> x + y}, 10, 20) //람다식 함수를 인자로 넘김
}
fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a,b) //sum 매개변수는 함수이다.
highFunc의 매개변수인 sum을 보면 람다식으로 이름 없는 함수가 정의되어 있다. 즉 highFunc() 함수는 sum을 통해서 람다식 함수를 인자로 받아들일 수 있는 고차 함수가 된다.
정리
함수형 프로그래밍 정의와 특징
- 순수 함수를 사용해야 한다.
- 람다식을 사용할 수 있다.
- 고차 함수를 사용할 수 있다.
참고
do it 코틀린 프로그래밍 www.yes24.com/Product/Goods/74035266
- Total
- Today
- Yesterday
- mybatis config
- elasticsearch
- 베리 심플
- LocalDateTime
- 북리뷰
- config-location
- Bash tab
- intellij
- mybatis
- docker
- Spring
- Linux
- maven
- Kotlin
- springboot
- LocalDate
- JavaScript
- Spring Security
- window
- Java
- localtime
- oracle
- 오라클
- rocky
- svn
- jQuery
- input
- Mac
- k8s
- Github Status
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |