함수형 프로그래밍이란

2023. 1. 10. 21:25kotlin

함수형 프로그래밍이란?

1. 정의

함수형 프로그래밍(函數型 프로그래밍, 영어: functional programming)은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.

- 위키백과

Functional programming is a programming paradigm in which we try to bind everything in pure mathematical functions style. It is a declarative type of programming style. Its main focus is on “what to solve” in contrast to an imperative style where the main focus is “how to solve”. It uses expressions instead of statements.

- Geeksforgeeks

순수함수를 사용하여 프로그램의 부담을 줄이고 함수 밖에서의 데이터 변환을 멀리하는 방식 등을 지향하는 일종의 프로그래밍 패러다임

2. 특징

1) 순수 함수( Pure Function )

fun sun(a: Int, b: Int)= a+b
  • 동일한 인자에 동일한 결과를 생성한다.
  • Side Effect는 없다. 즉, 지역/전역 변수나 입력, 출력, 인자를 바꾸지 않는다.
  • 외부의 값에 어떠한 변화도 없으며 동일한 결과를 제공하므로 결정론적이다.
  • Thread에 안전성을 보장받을 수 있다.

2) 재귀( Recursion )

fib(n)
    if (n <= 1)
        return 1;
    else
        return fib(n - 1) + fib(n - 2);
  • for문과 while문의 사용은 없다.
  • 반복은 재귀를 통해 구현한다.

3) 참조 투명성 ( Referential transparency )

  • 한번 정의된 변수는 값이 변경되지 않는다.
  • 필요한 경우 새로운 변수를 생성하여 새롭게 할당한다.
  • 모든 변수의 상태는 일정하다.

4) 일급 객체 ( First class citizen ) & 고차 함수(High Order)

일급 객체

  • 변수나 데이터에 할당할 수 있어야 한다.
  • 객체의 인자로 넘길 수 있어야 한다.
  • 객체의 리턴값으로 리턴할 수 있어야 한다.

고차 함수

  • 다른 함수를 인자로 사용하거나 함수를 결과값으로 반환하는 함수
  • 일급 객체 or 일급 함수를 사용하는 함수가 고차 함수이며 일급 함수가 고차함수이다.
// 1. 변수나 데이터 할당
val function1 = { println("first class") }

// 2. 함수의 인자로 전달
fun function2(f: () -> Unit) {
    f.invoke()
}

// 3. 함수의 반환값으로 전달
fun function3() : ()->Unit {
    return function1
}

fun main() {
    function1.invoke()
    function2(function1)
    function3().invoke()
}

3. 장점

1) 어떠한 상태도 변경하지 않고 입력에만 의존하므로 이해하기 쉽다.
2) 함수를 값으로 다루고 매개변수로 함수에 전달하므로 코드의 가독성과 이해를 높인다.
3) 테스트나 디버깅이 더 쉽다. 순수함수의 사용으로 불변값을 사용하여 문제 확인이 더 쉬워진다.
4) 순수함수는 변수나 다른 데이터를 변경하지 않기 때문에 동시성과 병렬성을 구현하는데 이점이 있다.
5) 필요할 때만 값을 저장한다.

4. 단점

1) 가끔 가독성을 떨어트리고 이해하기 어려울 때가 있다.
2) 재귀함수와 불변 변수로 성능의 저하가 발생할 수 있다.

'kotlin' 카테고리의 다른 글

Kotlin enum 넌 뭐니?  (0) 2023.09.04
Kotlin conf 2023!!  (0) 2023.05.07