🔻Java
[Java8]CompletableFuture
Java 스터디를 위한 발표 준비를 하면서, Thread에 대해서 조금 깊게 공부했는데도 CompletableFuture는 조금 막연해서 어려웠다. 내용은 이해가 가는데 이걸 실제로 적용하는 건 다른 이야기인 것 같다. 알고리즘을 풀 때 처럼 일단 코드를 쳐놓고 줄일 수 있는 방법을 생각해나가며 적용해나가는 방법으로 익숙해져야 할 것 같다. 뭐든 기본이 탄탄하고, 단순한 방법과 구현 말고, 왜 쓰는지에 대한 개념이 먼저 탑재되어야 활용도 가능한 것 같다.
CompletableFuture에서 join()과 get()의 차이에 대해 공부하면서 혼자 이런건가?하고 이해하고 넘어간 부분이 있었는데, 스터디 발표를 들으면서 보다 개념에 가깝게 이해할 수 있던 것 같다.
get()
- get() 메소드는 Future interface에 정의되어 있음
- 작업처리도중 interrupt 되었다면, InterruptedException 발생시킴
작업처리도중 예외가 발생하면, ExecutionException을 발생시킴
👉두 예외 모두 RuntimeException을 상속하지 않고 꼭 처리해야하는 CheckeException으로
try/catch 또는 throws로 예외처리를 해줘야함
join()
- join() 메소드는 CompletedFuture에 정의되어 있음
join()은 InterruptedException과 ExceutionException을 throw하지 않음
대신 uncheckedExceptino인 CompletionException을 던진다.
👉try/catch 블록이 필요하지 않으며, exceptionally()를 활용하여 예외처리를 해줌CompletableFuture<List<String>> cf = CompletableFuture .supplyAsync(this::process) .exceptionally(this::getFallbackListOfStrings) // Here you can catch e.g. {@code join}'s CompletionException .thenAccept(this::processFurther);
✅ 결론적으로 CompletedFuture에서는 Join() 이 권장됨!
언젠가의 TIL에 적었던 것 같은데(...), 예외처리를 제대로 공부할 때가 온 것 같다ㅎㅎ
당장 Java8에 추가된 기능에 대한 스터디는 끝났으니까, 다음주 effective-java 스터디가 시작되기 전까지 Java자체에서 잘 모르는 (사실상 전부) 파트를 정리하면서 다시 공부하는 한 주를 보내야겠다.
🔻Algorthm
no2839 설탕배달
no20923 숫자할리갈리
no1464 1로만들기
오늘 그래도 4문제 중에 3문제를 풀었다!
숫자할리갈리를 온전히 혼자 힘으로 풀었다는 게 매우 뿌듯하다. 풀어본 것 중에 젤 높은 난이도였는데 딱히 알고리즘 이론이 활용되지 않아서인지 숫자할리갈리랑 아직 풀지 않은 다른 문제가 더 어려운 것 같다.
1로 만들기가 풀리지 않아서, 찾아봤더니 DP (다이나믹 프로그래밍) 이라는 알고리즘 카테고리에 속해있었는데 이것도 뭔가 이론의 영역이라 내일이나 오늘 정리하고 공부해봐야할 것 같다. 이런 것들은 대체 어느 똑똑이가 만든걸까 대단하다.
그래도 일주일동안 열심히 하루도 빼놓지 않고 열심히 했더니 나름 성과가 보이고있다!
아마 2n일동안 연속으로 알고리즘을 풀었을 때 n단계의 새싹을 주는 거 같은데, 놓치지 않고 받아봐야지! ㅎ-ㅎ