Functional Programmingin Kotlin

하이솝·2026년 3월 29일

Functional Programming(FP)


  • 함수형 프로그래밍이란?
    자료 처리를 수학적 함수의 계산으로 다루고
    상태 변경(chaninging state)과 가변 데이터(mutable data)
    쓰지 않는 프로그래밍 패러다임

수학적 함수(pure function): 같은 입력이면 항상 같은 출력을 반환하고, 외부에 영향을 주지 않는 함수

// ✅ 수학적 함수 (Pure Function)
fun add(a: Int, b: Int): Int {
    return a + b  // 항상 같은 입력 → 같은 출력
}
add(2, 3)  // 항상 5
add(2, 3)  // 항상 5

상태 변경(changing state): 변수의 값이 시간에 따라 바뀌는 것

가변 데이터(mutable data): 변경 가능한 데이터

// 가변
val mutableList = mutableListOf(1, 2, 3)
mutableList.add(4)      // ✅ 변경 가능
// 불변
val immutableList = listOf(1, 2, 3)
immutableList.add(4)    // ❌ 변경 불가

  • 명령형 프로그래밍(imperative programming)에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조

  • 1930년대에 계산 가능성, 결정문제, 함수 정의, 함수 응용과 재귀를 연구하기 위해 개발된 함수체계인 람다 대수(lamda-calculus)에 근간을 두고 있음

수학적 함수와 명령형 프로그래밍에서 사용되는 함수

  • 명령형 프로그래밍의 함수

프로그램의 상태 값을 바꿀 수 있는 부수 효과(side effect)가 생길 수 있음

예) 특정 함수가 전역 변수를 바꾼다고 했을 때,
다른 전역 변수를 사용하는 함수에 영향이 갈 수 있음

이러한 부수 효과가 생기는 것을 참조 투명성이 없다고 하며,
같은 코드라도 실행되는 프로그램의 상태에 따라 다른 결과값이 나옴

  • 함수형 프로그래밍의 함수

함수의 출력 값은 함수에 입력된 인수에만 의존

인수 x에 같은 값을 넣고 함수 f를 호출하면
항상 f(x)라는 결과가 나옴(참조 투명성)

부수 효과를 제거하면 프로그램 동작 이해와 예측이 쉬움


함수형 프로그래밍 기본 요소

  • pure function
    부수 효과(side effect)가 없는 함수
    thread-safe하여 병렬 계산 용이

  • anonymous function: 익명 함수
    코틀린에서는 {x -> x * x} (lamda function)

  • higher-order-function: 고차(고계) 함수, 함수를 인자나 리턴으로 다루는 함수
    코틀린에서는 (1..10).map {it * it}

주의
코틀린은 순수한 함수형 언어가 아님. 함수형 언어의 요소 뿐 아니라
명령형 언어, 객체 지향 언어 패러다임을 모두 가지고 있음

0개의 댓글