기술 학습
JAVA 함수형 프로그래밍(Functional Programming) 개념과 활용
EpicArts
2025. 2. 14. 18:07
1. 함수형 프로그래밍이란?
함수형 프로그래밍(Functional Programming)은 프로그래밍을 함수의 조합으로 표현하는 패러다임입니다. Java 8부터 함수형 프로그래밍을 적극적으로 지원하며, 람다 표현식과 스트림 API를 활용하여 코드의 간결성과 유지보수성을 높일 수 있습니다.
함수형 프로그래밍의 주요 특징:
- 불변성(Immutability): 데이터의 변경 없이 순수 함수를 조합하여 사용
- 순수 함수(Pure Function): 동일한 입력값에 대해 항상 동일한 결과 반환
- 고차 함수(High-order Function): 함수를 인자로 전달하거나 반환할 수 있음
- 지연 실행(Lazy Evaluation): 필요할 때만 연산 수행
2. 함수형 인터페이스와 람다 표현식
Java는 java.util.function 패키지를 제공하여 다양한 함수형 인터페이스를 지원합니다.
2.1 주요 함수형 인터페이스
인터페이스설명주요 메서드
Consumer<T> | 입력을 받아 처리 (리턴값 없음) | accept(T t) |
Supplier<T> | 입력 없이 값 반환 | get() |
Function<T, R> | 입력을 받아 변환 후 반환 | apply(T t) |
Predicate<T> | 입력을 받아 참/거짓 반환 | test(T t) |
2.2 함수형 인터페이스 예제
import java.util.function.Function;
public class FunctionExample {
public static void main(String[] args) {
Function<Integer, String> intToString = num -> "숫자: " + num;
System.out.println(intToString.apply(10));
}
}
3. 고차 함수와 메서드 참조
3.1 고차 함수 예제
import java.util.function.Function;
public class HighOrderFunctionExample {
public static void main(String[] args) {
Function<Integer, Integer> square = x -> x * x;
Function<Integer, Integer> doubleValue = x -> x * 2;
Function<Integer, Integer> combinedFunction = square.andThen(doubleValue);
System.out.println(combinedFunction.apply(3)); // 18 (3*3=9, 9*2=18)
}
}
3.2 메서드 참조 예제
import java.util.function.Consumer;
public class MethodReferenceExample {
public static void main(String[] args) {
Consumer<String> print = System.out::println;
print.accept("Hello, Method Reference!");
}
}
4. 스트림 API와 함수형 프로그래밍
스트림 API는 함수형 프로그래밍의 핵심 요소 중 하나로, 컬렉션 데이터를 간결하게 처리할 수 있습니다.
4.1 filter와 map 사용 예제
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamFunctionalExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(filteredNames);
}
}
5. 결론
이번 글에서는 Java의 함수형 프로그래밍 개념과 활용법을 살펴보았습니다. 함수형 프로그래밍을 사용하면 코드의 재사용성이 높아지고 유지보수성이 향상됩니다.
다음 글에서는 Java의 비동기 프로그래밍(Asynchronous Programming)과 CompletableFuture에 대해 알아보겠습니다!