순수 함수를 조합하고 공유 상태, 변경 가능한 데이터 및 부작용을 피해 소프트웨어를 만드는 프로세스
'선언형' 프로그래밍으로, 애플리케이션의 상태는 순수 함수를 통해 전달된다.
애플리케이션의 상태가 일반적으로 공유되고 객체의 메서드와 함께 배치되는 OOP와는 대조되는 프로그래밍 방식
명령형 프로그래밍(절차지향, 객체지향)
상태와 상태를 변경시키는 관점에서 연산을 설명하는 방식
알고리즘을 명시하고, 목표는 명시하지 않음
선언형 프로그래밍
How보다는 What을 설명하는 방식 (어떻게보단 무엇을)
알고리즘을 명시하지 않고 목표만 명시함
명령형 프로그래밍은 어떻게 할지 표현하고, 선언형 프로그래밍은 무엇을 할 건지 표현한다.
// stream API를 이용한 방식
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.forEach(System.out::println);