NPE(Null Pointer Exception) 예외를 Optional이 제공하는 메소드로 간단하게 회피할 수 있다.
⚠️ 잘못 사용하면 오히려 코드가 오히려 지저분해지고, 의미 없는 동작, Side-Effect 유발이 많이 발생할 수 있음.
null 을 반환하면 오류가 발생할 가능성이 매우 높은 경우에 “결과 없음”을 명확하기 드러내기 위해 메소드의 반환 타입으로 사용되도록 매우 제한적인 경우로 설계됨.
- Java 언어 아키텍트 Brian Goetz
✅ Optional은 메소드 반환 타입으로만 사용해야한다.
➕ Optional은 Wrapper Class 이다.
Optional의 객체 꺼내는 방법
Optional<String> opt = Optional.ofNullable("Optional은 Wrapper Class");
System.out.println(opt.get());
Optional<String> empty = Optional.empty();
System.out.println(empty.isPresent()); // ?
Optional<String> empty = Optional.of("assert NotNull");
System.out.println(empty.isPresent()); // ?
Optional.of(null); // ?
→ NPE 발생. of는 null이 아님을 확신할때 사용.
Optional<String> empty = Optional.ofNullable(null);
System.out.println(empty.isPresent()); // ?
Optional에서 꺼낸 객체가 존재한다면, 구문수행.
String name = null;
Optional<String> opt = Optional.ofNullable(name);
opt.ifPresent(n -> System.out.println(n.length()));
Optional에서 꺼낸 객체가 존재한다면 꺼내고, 그렇지 않다면? orElse의 인자값을 반환
System.out.println(Optional.ofNullable(null).orElse("냐옹"));
System.out.println(Optional.ofNullable("Hey!").orElse("냐옹"));
orElse()와 비슷하지만, 인자값으로 람다 표현식의 결과값을 출력
System.out.println(Optional.ofNullable(null).orElseGet(() -> "냐옹"));
System.out.println(Optional.ofNullable("Hey!").orElseGet(() -> "냐옹"));
Optional에서 꺼낸 객체가 존재한다면 꺼내고, 그렇지 않다면? Exception 던지기
String nullName = null;
String name = Optional.ofNullable(nullName).orElseThrow(IllegalArgumentException::new);