Goal
- 함수형 프로그래밍에 대해 알아본다
- 함수형 프로그래밍의 특징에 대해 알아본다.
함수형 프로그래밍 이란?
함수형 프로그래밍(Functional Programming)은 프로그래밍 패러다임 중 하나로, 프로그램을 수학적 함수의 조합으로 생각하고 이를 구현하는 방식이다.
함수형 프로그래밍의 특징
순수 함수 (Pure Functions): 순수 함수는 함수의 반환 값이 입력 값에만 의존하며, 외부의 상태를 변경하지 않는 함수를 일컫는다.
같은 입력에 대해서는 항상 같은 결과를 반환하며, 부작용(side effect)이 없다. 이러한 순수 함수는 예측 가능하고 테스트하기 쉬우며, 병렬 처리와 같은 최적화가 가능하다.
private int c = 1;
// 순수 함수 예제: 두 정수의 합을 계산하는 함수
public int sum(int a, int b) {
return a + b;
}
// 순수 함수가 아닌경우
public int sum(int a, int b) {
return a + b + c;
}
위의 sum 함수는 입력으로 받은 a와 b라는 두 정수의 합을 계산하여 반환한다. 이 함수는 외부의 어떠한 상태도 변경하지 않고, 동일한 입력에 대해서는 항상 같은 결과를 반환하므로, 순수 함수의 특성을 충족한다.
고계 함수 : 고계 함수는 함수를 다른 함수의 인자로 전달하거나, 함수를 반환하는 함수를 말한다. 이는 함수를 값으로 다루는 것을 의미하며, 함수 조합과 추상화를 통해 코드의 재사용성과 모듈성을 높일 수 있다.
여기서 1급 객체(First-class object)의 개념이 등장하며, 1급 객체는 다음과 같은 조건을 충족한다.
- 변수에 할당 가능: 함수는 변수에 할당되어 저장될 수 있고, 이후에 해당 변수를 통해 함수를 호출 가능
- 인자로 전달 가능: 함수는 다른 함수의 인자로 전달될 수 있고, 다른 함수 내에서 해당 함수를 호출 가능
- 반환 값으로 사용 가능: 함수는 다른 함수의 반환 값으로 사용 가능. 다른 함수 내에서 실행된 함수의 결과를 반환하거나, 필요한 시점에 실행하여 결과를 반환 가능.
- 자료 구조에 저장 가능 : 함수는 배열, 리스트, 맵 등과 같은 자료 구조에 저장 가능
import java.util.function.Function;
public class HigherOrderFunctionsExample {
public static void main(String[] args) {
Function<Integer, Integer> square = x -> x * x;
Function<Integer, Integer> increment = x -> x + 1;
// 함수를 인자로 받아들이고 함수를 조합하여 새로운 함수를 반환하는 고계 함수
Function<Integer, Integer> composed = square.andThen(increment);
int result = composed.apply(5); // 5의 제곱 후 1 증가
System.out.println(result); // Output: 26
}
}
3. 불변성 (Immutability): 불변성은 데이터의 변경을 허용하지 않는다. 함수형 프로그래밍에서는 데이터를 변경하는 대신, 새로운 데이터를 생성하는 방식을 선호합니다. 이를 통해 데이터의 상태 변경에 따른 복잡성과 오류 가능성을 줄일 수 있다.
Java에서 함수형 프로그래밍의 예
- lamda
- stream
- Optional
'JAVA > 함수형 프로그래밍' 카테고리의 다른 글
[stream] stream / 스트림 (0) | 2023.05.16 |
---|