728x90
리액티브 프로그래밍(Reactive Programming)
- 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델
리액티브 시스템은 비동기 메시지 통신을 기반으로 한다
리액티브 시스템에서의 비동기 메시지 통신은 Blocking I/O 방식이 아닌, Non-Blocking I/O 방식의 통신
- 선언적 프로그래밍, 실행할 동작을 구체적으로 명시하지 않고 목표만 선언
- 데이터 소스의 변경이 있을 때마다 데이터 전파
- 리액티브 프로그래밍 코드는 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현
- 리액티브 프로그래밍 코드에서 파라미터를 가지는 메서드는 함수형 프로그래밍 방식의 코드 형태의 파라미터를 가짐
명령형 프로그래밍 VS 선언형프로그래밍
명령형 프로그래밍
// 6보다 더 크고 홀수인 숫자들의 합계를 구하는 것
public class Example1_1 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 3, 21, 10, 8, 11);
int sum = 0;
for(int number : numbers){
if(number > 6 && (number % 2 != 0)){
sum += number;
}
}
System.out.println("합계: " + sum);
}
}
for문을 돌면서 numbers List에 포함된 숫자들에 하나씩 접근하겠어
선언형프로그래밍
동작을 구체적으로 명시하지 않고 목표만 선언, 코드가 간결해지고 가독성도 좋아짐
public class Example1_2 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 3, 21, 10, 8, 11);
int sum = numbers.stream()
.filter(number -> number > 6 && (number % 2 != 0))
.mapToInt(number -> number)
.sum();
System.out.println("합계: " + sum);
}
}
numbers List에 포함된 숫자들에 접근 좀 해줘
리액티브 프로그래밍 코드의 구성요소
- Publisher: 입력으로 들어오는 데이터를 Subscriber에 재공하는 역할을 함
- Subscriber: Publisher로부터 전달받은 데이터를 사용하는 역할
- Data Source: Publishe의 입력으로 전달되는 데이터
- Operator: Publisher와 Subscriber 중간에서 데이터를 가공하는 역할
728x90