BackEnd/Java

Java에서 함수형 프로그래밍의 이해와 활용

반응형

함수형 프로그래밍은 현대 소프트웨어 개발에서 중요한 개념 중 하나로, Java와 같은 언어에서도 효과적으로 활용될 수 있다. 이 글에서는 함수형 프로그래밍의 기본 개념부터 Java에서의 활용 방법까지 한번 알아도록 하겠다.

 

  함수형 프로그래밍 개요

함수형 프로그래밍은 프로그램을 수학적 함수의 조합으로 보는 프로그래밍 패러다이며, 이러한 관점에서 상태의 변화보다는 데이터의 변환에 초점을 맞춘다. 함수형 프로그래밍의 주요 특징은 불변성, 일급 함수, 고차 함수 등이 있다.

  함수형 프로그래밍의 장점

코드의 간결성

- 함수형 프로그래밍은 불필요한 중복을 줄이고 간결한 코드 작성가능

- 각 함수가 독립적이며, 입력만으로 출력이 결정되므로 코드가 직관적

테스트 용이성

- 함수형 프로그래밍에서는 순수 함수를 사용하고 불변 데이터를 다루기 때문에 테스트가 용이

- 같은 입력에는 항상 같은 출력이 나오기 때문에 테스트 결과가 일관성이 있다

병렬 처리 가능

- 함수형 프로그래밍에서는 상태 변경이 없기 때문에 병렬 처리가 더욱 용이

- 여러 스레드에서 안전하게 동작하는 코드를 작성 가능

유지보수성

- 부작용을 최소화하여 코드의 예측 가능성을 높이므로 코드 유지보수가 더 쉬워진다

- 또한 작은 함수들의 조합으로 큰 기능을 만들기 때문에 모듈화가 잘 이루어진다.

 

 

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

순수 함수 입력 값만을 기반으로 결과를 반환하며, 외부 상태에 영향을 주지 않는 함수

public int add(int a, int b) { return a + b; }

불변성 데이터의 변경이 없으므로 예측 가능하고 안전한 코드 작성 가능

public class ImmutablePerson {
    private final String name;
    private final int age;
    
    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
}

일급 함수 함수를 변수에 할당하거나 인자로 전달하는 것이 가능

Function<Integer, Integer> square = x -> x * x;
int result = square.apply(5); // result는 25

고차 함수 함수를 다루는 함수로, 매개변수로 함수를 받거나 함수를 반환하는 함수

Function<Integer, Function<Integer, Integer>> curryAdd = x -> y -> x + y;
Function<Integer, Integer> add5 = curryAdd.apply(5);
int result = add5.apply(3); // result는 8

  Java에서의 함수형 프로그래밍

Java 8부터 람다 표현식과 스트림 API를 도입하여 함수형 프로그래밍을 지원한다.

람다 표현식 익명 함수를 생성하기 위한 간단한 문법으로, 함수를 변수에 할당하거나 매개변수로 전달할 수 있다.

(x, y) -> x + y

스트림 API 데이터의 흐름을 다루는데 사용되며, 병렬 처리에 용이하다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                .filter(n -> n % 2 == 0)
                .mapToInt(Integer::intValue)
                .sum();

  예제를 통한 함수형 프로그래밍 활용

아래 예제는 주어진 숫자 리스트에서 홀수를 걸러내어 제곱한 후 모두 더하는 과정을 보여준다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int result = numbers.stream()
                   .filter(n -> n % 2 != 0)
                   .mapToInt(n -> n * n)
                   .sum();

  결론

함수형 프로그래밍은 Java와 같은 언어에서도 강력한 개념으로 활용된다. 람다 표현식과 스트림 API를 통해 코드의 가독성과 유지보수성을 높이며, 병렬 처리의 이점도 누릴 수 있으며, 초보 개발자라도 함수형 프로그래밍을 습득하여 더 효율적이고 확장성 있는 코드를 작성할 수 있을 것이다.

 

반응형

'BackEnd > Java' 카테고리의 다른 글

Java 한번 건드려볼까? - 1  (2) 2022.01.17