본문 바로가기

기술 학습

JAVA 함수형 프로그래밍(Functional Programming) 개념과 활용

728x90

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 filtermap 사용 예제

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에 대해 알아보겠습니다!


728x90