What
- Optional의 쓰이는 메소드로서 체이닝 형식으로 사용되어 질 수 메소드이다.
- 두개의 함수 모두 해당 값이 존재하지 않을 때 라는 의미를 갖는 메소드이다.
Optional<String> name = Optional.ofNullable("엘리자베스");
name.~~~
❓Why
- 호출로 인해 메모리 상에 이슈가 발생할 수 있다.
- 혹은 함수를 호출하는데 응답시간에 지연이 생긴다.
- 결과적으로 createDefault의 호출 여부에 따라 다르다는 것을 알 수 있다.
예제 코드
package com.programmers.objectstudy; import java.time.LocalDateTime; import java.util.Optional; public class Main { public static void main(String[] args) throws InterruptedException { testOrElseOfStream(); System.out.println("===============boundary================"); testOrElseGetOfStream(); } private static void testOrElseGetOfStream() throws InterruptedException { Optional<String> name = Optional.ofNullable("엘리자베스"); System.out.println(getLogTime("orElseGet 시작 시간")); name.orElseGet(() -> { try { return createDefault(); } catch (InterruptedException e) { throw new RuntimeException(e); } }); System.out.println(getLogTime("orElseGet 종료 시간")); } private static void testOrElseOfStream() throws InterruptedException { Optional<String> name = Optional.ofNullable("엘리자베스"); System.out.println(getLogTime("orElse 시작 시간")); name.orElse(createDefault()); System.out.println(getLogTime("orElse 종료 시간")); } public static String getLogTime(String prefix) { return prefix + " : " + LocalDateTime.now().getSecond(); } public static String createDefault() throws InterruptedException { System.out.println("Main.createDefault 실행 @@@@"); ; Thread.sleep(1000); return "DEFAULT_NAME"; } }
✅How[어떻게 써야 잘 쓸까?]
⚠️ 무조건적으로 값이 여부는 상관없이 호출되는 orElse 메소드는 성능의 이슈가 생길 수 있다.
- orElse문은 되도록이면 피해야 맞는 것이다.(무거운 작업이 진행될 경우에는 더더욱 피해야 한다)
📌 REFER
'JAVA' 카테고리의 다른 글
객체 판별 (0) | 2021.10.18 |
---|---|
동시성 (0) | 2021.05.31 |
Blocking , NonBolocking (0) | 2021.05.23 |
Enum class (0) | 2021.05.17 |
인터페이스, 추상클래스 (0) | 2021.05.16 |
댓글