본문 바로가기
Programming/Java, Spring

Java도 함수형 프로그래밍을 지향해야 하는 이유

by Renechoi 2023. 1. 10.

함수형 프로그래밍 

* 함수형 프로그래밍의 특징은 함수를 일급 시티즌으로 대우한다는 것이다
* stream에서 for each로 element를 돌면서 데이터를 보내는 것이 아니라 함수, 즉 action을 보낸다
* function을 sending 한다 !

 

/**
 * 기존의 for문을 이용한 sum을 구할 때와는 달리
 * local variable이나 mutations, loop 등을 신경쓸 필요 없다
 * Fp는 그저 명령할 뿐이다
 *
 * 또한 명령을 수행함에 있어 구체적인 방법을 정하지 않는다
 * just saying what to do and not how to do
 */

List<Integer> numbers = List.of(4, 5, 6, 7, 8, 3, 15);
int sum = numbers.stream()
        .filter(v -> v % 2 == 0)
        .reduce(0, (number1, number2) -> number1 + number2);

 

 

 


 

 

함수형 프로그래밍의 로직 플로우 

 

1. 함수를 변수에 저장하기

2. 함수를 메서드에 전달하기

3. 메서드로부터 함수를 리턴하여 실행하기 

 

List.of(23, 43, 34, 45, 36, 48)
                .stream()
                .filter(new EvenNumberPredicate())
                .map(new NumberSquareMapper())
                .forEach(new SystemOutConsumer());

 

1번 - 함수를 변수에 담는 것은 아래와 같이 가능하다 

Predicate<? super Integer> evenPredicate = n -> n%2 == 0;

=

private static Predicate<? super Integer> createEvenPredicate() {
	return n -> n %2 ==0;

 

 


함수형 프로그래밍은 프로그래머에게 많은 선택지를 제공한다.

 

mutation을 하지 않으면서 원하는 결과값을 도출하게 하여 기능 로직에 집중하게 한다. 

 

함수형 프로그래밍은 명령형 프로그래밍이라고도 불리는데 정확히 어떤 코드를 어떤 방식으로 실행해야 한다고 가르쳐주는 것이 아니라 그저 선언하기 때문이다. 

 

이러한 선언형(declarative) 방식은 객체의 역할 위임과도 맞닿아 있다. 

 

객체는 한 가지 일만 하면서 해당 일에 대한 전적인 책임을 갖는다. 즉, 기능에 대한 역할이 전적으로 위임되어 있다. 이와 같은 프로그래밍이 지향하는 것은 부작용이 없는 프로그래밍이다. 객체는 응집도가 높으나 결합력은 낮다. 그럼으로써 한 부분이 고장나더라도 전체 프로그램이 영향을 받지 않는 것을 지향한다. 

 

함수형 프로그래밍을 통한 구현은 이와 같은 객체 지향의 메시지 전달 및 위임의 지향을 쉽게 구현하게 하는 데 큰 도움이 된다. 

 

 

반응형