Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Future VS CompleteFuture (이진혁) #179

Open
LJH098 opened this issue Jul 3, 2024 · 0 comments
Open

Future VS CompleteFuture (이진혁) #179

LJH098 opened this issue Jul 3, 2024 · 0 comments
Assignees
Labels

Comments

@LJH098
Copy link

LJH098 commented Jul 3, 2024

문제가 무엇인가?

Future 와 CompleteFuture 차이점이 무엇인가?

왜 이런 문제를 선정하였는가?

책에서 Future에서 어떤점을 개선한점이 CompleteFuture인지 나오지만 정확히 어떻게 다른지 알아보고 싶어서 선정하였다.

자신이 생각한 답변은 무엇인가?

먼저 동기, 비동기 그리고 blocking, non-blocking에 대해서 먼저 알아보자

동기 VS 비동기 동기, 비동기는 작업을 순차적으로 수행할지 말지에 대한 관점 차이이다. image - 동기는 작업 B가 완료되어야 다음 작업을 수행하고, 비동기는 작업 B의 완료 여부를 따지지 않고 바로 다음 작업을 수행한다
블락킹 VS 논블락킹 전체적인 작업의 흐름 자체를 막냐 안막냐의 관점 차이. image
  • 즉, 자바스크립트의 비동기는 비동기 + 논블락킹이다.

Blocking vs Non-Blocking

Future는 get() 메서드를 통해 비동기 연산의 결과를 얻습니다. 하지만 이 메서드는 연산이 완료될 때까지 현재 스레드를 차단(blocking)합니다. 즉, 비동기 처리 결과를 기다리는 동안 현재 스레드는 대기 상태에 머무르게 됩니다.
반면에, CompletableFuture는 연산이 완료되면 자동으로 콜백 함수를 통해 결과를 반환합니다. 이를 통해 비동기 처리가 완료되기를 기다리는 동안에도 다른 작업을 계속 진행할 수 있습니다. 이는 Non-Blocking 방식의 비동기 처리를 가능하게 합니다.
단일 연산 vs 연산의 조합

Future는 단일 연산의 결과만을 표현하는 데 사용됩니다.
반면에, CompletableFuture는 thenCompose(), thenCombine() 등의 메서드를 통해 여러 비동기 연산을 조합하고 그 결과를 표현할 수 있습니다. 이를 통해 더욱 복잡한 비동기 로직을 구현할 수 있습니다.
결론적으로, 복잡한 비동기 로직을 구현하거나, 비동기 처리 도중에 다른 작업을 진행해야 하는 경우에는 CompletableFuture를 사용하는 것이 더 유용합니다.

비동기 작업

supplyAsync()

Supplier 함수형 인터페이스를 인자로 받고 CompletableFuture<?>를 반환

  • 이때 CompleteableFuture 객체는 비동기 작업의 결과를 나타내며 작업의 상태 정보를 담고 있다.

runAsync()

Runnable 인터페이스를 인자로 받아, CompletableFuture를 반환

@LJH098 LJH098 added the ch15 label Jul 3, 2024
@LJH098 LJH098 self-assigned this Jul 3, 2024
@rlajm1203 rlajm1203 changed the title Future VS CompleteFuture (이진혁) Future VS CompleteFuture (김종민) Jul 3, 2024
@rlajm1203 rlajm1203 changed the title Future VS CompleteFuture (김종민) Future VS CompleteFuture (이진혁) Jul 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant