수학적 함수(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) // ❌ 변경 불가
프로그램의 상태 값을 바꿀 수 있는 부수 효과(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}
주의
코틀린은 순수한 함수형 언어가 아님. 함수형 언어의 요소 뿐 아니라
명령형 언어, 객체 지향 언어 패러다임을 모두 가지고 있음