inflearn logo
강의

Course

Instructor

Kevin's Easy RxJava Part 1

What is Reactive Programming?

선언형 프로그래밍과 명령형 프로그래밍

784

evanhwang

11 asked

1

안녕하세요 강사님~!
 
예제로 들어주신 선언형 프로그래밍 소스코드도 number가 6 이상, 2로 나눌 수 없는 것을 filtering 한다는 점에서 앞의 명령형처럼 구체적 알고리즘이 적혀있는 것 같아서 두 차이점이 헷갈리는데, 좀 더 명확히 구분할 수 있는 방법 없을까요?
 
for문 역할 대신 stream, filter로만 바뀐걸로 보여서요 ㅠ 함수형 프로그래밍이, 명령형 프로그래밍, 선언형 프로그래밍이 헷갈립니다.

함수형-프로그래밍 RxJava Reactive Programming Reactive-Streams

Answer 2

3

Kevin

혁진님, 안녕하세요?

제가 설명이 부족해서 헷갈리시는 것 같은데 다시 한번 잘 설명해보겠습니다. ^^;

우선 저희가 프로그래밍에 대해서 전혀 모르는 상태에서 선언형 프로그래밍을 배우고 있다고 가정을 해볼게요.

그럴 경우, filter() 메서드에게 'number > 6 && (number % 2 != 0)' 이런 조건을 주면서 "요런 조건 줄테니까 여기 해당하는 데이터 좀 줘"라고 부탁을 할테구요.

다음에는 filter() 메서드 내부에서 if 문과 for 문을 사용해서 데이터를 필터링 할텐데 여기서 if문과 for문이 구체적인 알고리즘에 해당합니다.  

즉, 사용자가 최소한의 조건을 지정해주고, 나머지 제어는 filter() 메서드에게 맡기는 것입니다.

결국 구체적 알고리즘이라는 것은 if, for 같은 전통적인 명령형 프로그래밍에서 사용하는 제어문들을 직접적으로 사용하는 거라고 보시면 될 것 같아요.

 

그리고 함수형 프로그래밍에 대한 개념은 간단한 예제로 대체 하겠습니다.

아래 예제는 함수형 프로그래밍 방식이 적용되지 않았을 경우입니다.

public class NotFunctionalBasic {
public static void main(String[] args) {
String message = getMessage(getName());

System.out.println(message);
}

private static String getMessage(String name) {
return "Hello " + name;
}

private static String getName() {
return "Kevin";
}
}

getMessage(getName())보시면 getMessage() 메서드의 파라미터로 마치 getName()이라는 메서드를 전달하는 것 처럼 보이지만 사실은 getName() 메서드의 리턴 값인 "Kevin"이라는 문자열을 getMessage()의 파라미터로 전달합니다. 

 

아래 에제는 함수형 프로그래밍 방식이 적용된 예제입니다.

public class FunctionalBasic {
public static void main(String[] args) {
String name = "Kevin";
String message = getMessage(() -> "Hello " + name);

System.out.println(message);
}

private static String getMessage(Supplier<String> s) {
return s.get();
}

}

getMessage(() -> "Hello " + name)을 보시면 파라미터로 전달한 () -> "Hello " + name 은 앞에서 본 예제처럼 즉시 호출되는 것이 아니라 getMessage() 쪽으로 실제로 전달이 된 후에 그 안에서 무언가 처리를 진행합니다.

 

두 예제의 결과는 동일한데 메서드의 파라미터로 값을 전달하느냐, 함수를 전달하느냐 그 차이에요.

 

이처럼 어떤 메서드의 파라미터로 함수가 전달이 된다면 함수형 프로그래밍 방식입니다.

사실 자바는 다른 언어처럼 실제 함수 자체를 전달하는 것이 아니라 함수형 인터페이스를 전달하는것인데,

자바에서는 람다 표현식을 사용해서 이런 방식으로 함수형 인터페이스를 전달하는 것을 함수형 프로그래밍이라고 부르고 있어요.

 

질문에 답이 되셨는지 모르겠네요.

다른 질문이 있으시면 언제든지 편하게 말씀해주세요.

감사합니다!

 

1

evanhwang

완전히 궁금증이 해결됐습니다~!! 감사합니다 ^^

Single과 관련해 여쭤보고 싶은 부분이 있습니다!

0

264

2

cold/hot publisher 예제 코드와 관련해 질문 드립니다.

0

363

1

CompletableObserver 클래스의 람다식 표현관련

0

297

1

1강에 예시로 보여주신 ToDoSample 코드에 관해 질문 드립니다!

0

356

1

데이터 결합 연산자 / merge 관련 질문

0

445

1

DROP 배압 전략에 관한 궁금증

0

300

2

map에서의 TimeUtil.sleep에 관한 궁금점

0

216

1

강의 내용을 정리해서 개인 블로그에 올려도 될까요?

0

562

2

TimeUtil.sleep 관련 질문

0

286

1

배압 전략 중에서 DROP 전략과 관련해서 질문 있습니다.

0

335

1

Error 발생 시에도 계속 처리 방법

0

689

2

첫번째 강의 부터 이번강의까지 수강하면서 궁금한점 질문드립니다.

0

325

1

안녕하세요. 질문이 있습니다.

1

354

1

logger 가 없는데 util 폴더도 같이 갖다놔야 하나요?

0

327

1

amb 연산자

0

233

1

질문 드립니다.

0

219

1

concatEager( ) 연산자에 관하여

0

318

1

Reactive Streams의 구성요소들과 RxJava의 구성요소들의 관계?

1

397

2

ObservableSequenceEqualExample.java 예제의 delay( ) 연산자 질문있습니다

0

309

3

defer( ), fromFuture( )도 just( )처럼 여러 인자 값을 받을 수 있는지 궁금합니다.

0

264

3

flatMapSingle() 메소드에 대하여

0

620

6

fromFuture() vs fromCallable() 생성 연산자에 대해

0

573

2

함수형 인터페이스 Comparator에 대해

0

397

2

Publisher와 Subscriber 간의 프로세스 흐름에 대한 질문

1

340

3