inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

더 자바, Java 8

CompletableFuture 1

CompletedFuture의 장점에 관한 의문입니다.

534

edu

작성한 질문수 1

2

ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<String> future = executorService.submit(() -> "hello!");

String res = future.get();

res = res.toUpperCase();

vs

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
	System.out.println("hello world! " + Thread.currentThread().getName());

	return "I'm Kang";
}).thenApply(s -> {
	System.out.println(Thread.currentThread().getName());

	return s.toUpperCase();
});

System.out.println(future.get());

 

 

안녕하세요 강의 잘 듣고있습니다!

 

1분 50초 ~ 2분 5초까지 말씀하시길

일반적으로 아래와 같은 callback 방식이 다른 언어에서 작성하는 코딩 패턴이라고 말씀하셨습니다.

다만 저에게 있어 위 코드와 아래 코드가 동작하는 방식이 동일한 것 같고 (어찌 됐든 둘 다 get에서 blocking이 될 테니 말이죠)  그러다 보니 Callback을 사용하는 장점을  잘 이해하지 못했습니다. 조금 더 다채로운 상황에서 Callback을 사용할 때 유리한 점이 있다면 소개해 주실 수 있을까요?

 

 

java

답변 1

8

백기선

안녕하세요. edu님 좋은 질문 감사합니다.

둘다 get() 호출시 blocking이 된다는 사실은 말씀하신대로 차이가 없지만 CompletableFuture은 다른 Future를 조합할 수 있다는 장점이 있어요. 그 조합하는 방법이 마치 함수형 프로그래밍 언어와 비슷하기 때문에 자바스크립와 같은 다른 언어의 코딩 패턴과 비슷하다고 언급한 겁니다.

thenApply나 thenCompose등으로 여러 Future를 (원한다면 비동기적으로도) 조합해서 사용하는데 있어 큰 장점을 느끼지 못한다면 Future만 쓰셔도 좋습니다. 나중에 여러 작업들이 복잡하게 이어지는 코드를 작성해야 할 때 CompletableFuture의 필요성을 느낄 수 있을 겁니다.

가령, 회원 목록을 가져오고, 스터디 목록을 가져와서, 회원 중에 스터디에 참여하지 않았던 사람들을 추리고, 각 회원에게 추천 스터디 목록을 가져온 다음, 추천 스터디를 이메일로 전송하는 로직이라면 이 중에 일부는 비동기적으로 동시에 처리할 수도 있고 일부는 순차적으로 이어져야 하는데 그런것들을 CompletableFuture가 제공하는 메소드로 잘 표현할 수 있다는 장점이 있습니다.

CompletableFuture의 get 실행에 대해 궁금한 점이 있습니다

0

238

2

기본 인터페이스의 기본 제공 메서드 관련 질문 (왜 이걸 사용하는지)

0

525

2

static 과 metaspace 관련 질문있습니다.

0

718

0

Map의 가장 큰 특징이 key는 null이 아니다

0

2390

2

Optional 질문드립니다.

0

478

0

인텔리제이 콘솔창

0

585

0

Supplier를 쓰는 이유

0

1367

1

allOf()에서 컬렉션으로 반환하는 것을 설명할 때 코드

0

714

1

[참고] LTS주기

0

478

1

orElseThrow()

1

1098

2

findFirst함수

0

363

1

메서드 레퍼런스

1

481

1

primitive type 질문

0

310

1

FunctionalInterface 상속 관계 질문

0

295

1

함수형 인터페이스를 왜 사용하나요?

1

502

1

while문 세미콜론

0

438

1

flatMap Optional과 Stream에서의 차이점을 제가 잘 이해했는지 헷갈립니다!

0

416

1

람다식과 익명 클래스

0

328

1

steam api 예제 git 주소

3

788

1

thread.sleep질문

0

394

2

.orElse 매개변수 질문

0

265

1

isPresent( ) 와 null 질문

0

339

1

예제 코드 질문

2

292

1

코드 질문있습니다.

0

238

1