변환의 전파데이터 흐름과 관련된 선언전 프로그래밍 패러다임이다.

이렇게 설명하면 정확하게 이해되지 않는다.

명령형 프로그래밍과 선언형 프로그래밍의 차이를 코드를 예로들어보자

List<Integer> numbers = List.of(1, 3, 21, 10, 8, 11);
int sum = 0;
for (int number : numbers) {
	if (number > 6 && (number % 2 != 0)) {
			sum += number;
	}
}

명령형 프로그래밍은 구체적인 알고리즘을 명시하면서 합을 계산한다.

int sum = numbers.stream()
								.filter(number > 6 && (number % 2 != 0))
                .mapToInt(number -> number)
                .sum();

선언형 프로그래밍은 명령형 프로그래밍과 달리 구체적인 알고리즘을 명시하지 않고 선언만을 사용해 해결할 수 있다.

이것도 어찌보면 똑같아 보일 수 있지만, 다르다.

iffor 같은 구체적인 제어문들을 직접적으로 사용하지 않고, 최소한의 조건만을 지정해준 뒤 나머지 작업은 filter() 메서드에게 맡기는 것이다.

filter()mapToInt() 를 보면 함수를 전달하고 있다.

자바에서 이렇게 람다 표현식을 사용해서 함수형 인터페이스를 전달하는 것을 함수형 프로그래밍이라고 부른다.

Reactive Programming을 위해 알아야 될 것


예제