코틀린

Do it! 코틀린 프로그래밍, 03-2 함수형 프로그래밍

조요피 2021. 8. 23. 22:19

코틀린은 함수형 프로그래밍과 객체 지향 프로그래밍을 모두 지원하는 다중 패러다임 언어.

함수형, 객체 지향 프로그래밍의 장점은 코드를 간략하게 만들 수 있다는 것.

함수형 프로그래밍이란?

순수 함수를 작성하여 프로그램의 부작용을 줄이는 프로그래밍 기법.

함수형 프로그래밍에서는 람다식과 고차 함수를 사용.

순수 함수

함수형 프로그래밍은 순수 함수를 사용하자는 것에서 출발함.

어떤 함수가 같은 인자에 대하여 항상 같은 결과를 반환하면 '부작용이 없는 함수'라고 한다.

부작용이 없는 함수가 함수의 외부의 어떤 상태도 바꾸지 않는다면 순수 함수(Pure Function)이라고 한다.

이런 특성 때문에 순수 함수는 스레드에 사용해도 안전하고 코드를 테스트하기도 쉽다는 장점이 있다.

// 순수 함수
fun sum(a: Int, b: Int): Int {
  return a + b
}

// 순수 함수가 아닌 것
fun check() {
  val test = User.grade()
  if(test != null) process(test)
}

람다식

수학에서 말하는 람다 대수는 이름이 없는 함수로 2개 이상의 입력을 1개의 출력으로 단순화한다는 개념.

함수형 프로그래밍의 람다식은 다른 함수의 인자로 넘기는 함수, 함수의 결괏값으로 반환하는 함수, 변수에 저장하는 함수를 말한다.

일급 객체(First Class Citizen)

함수형 프로그래밍에서는 함수를 일급 객체로 생각함.

람다식 역시 일급 객체의 특징을 가지고 있음.

  • 함수의 인자로 전달할 수 있다.
  • 함수의 반환값에 사용할 수 있다.
  • 변수에 담을 수 있다.

함수가 일급 객체면 일급 함수라고 부른다.

그리고 일급 함수에 이름이 없는 경우 '람다식 함수' 혹은 '람다식'이라고 부른다.

즉, 람다식은 일급 객체의 특징을 가진 이름 없는 함수.

고차 함수(High-order Function)

다른 함수를 인자로 사용하거나 함수를 결괏값으로 반환하는 함수.

일급 객체 혹은 일급 함수를 서로 주고 받을 수 있는 함수가 고차 함수가 되는 것.

fun main() {
  highFunc({x, y -> x + y}, 10, 20)
}

fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a, b)

함수형 프로그래밍의 정의와 특징

  1. 순수 함수를 사용해야 한다.
  2. 람다식을 사용할 수 있다.
  3. 고차 함수를 사용할 수 있다.