Java 8 Optional
클래스를 사용하는 경우 선택 사항으로 값을 랩핑 할 수있는 두 가지 방법이 있습니다.
String foobar = <value or null>;
Optional.of(foobar); // May throw NullPointerException
Optional.ofNullable(foobar); // Safe from NullPointerException
Optional.ofNullable
을 사용하는 유일한 안전한 방법이라는 것을 알고 Optional
있지만 왜 Optional.of
존재합니까? 왜 Optional.ofNullable
항상 안전하고 안전한 곳에 서 있지 않습니까?
답변
귀하의 질문은 던질 수 NullPointerException
있는 코드가 그렇지 않은 코드보다 나쁘다는 가정에 근거합니다 . 이 가정은 잘못되었습니다. foobar
프로그램 논리로 인해 null이 아닌 것으로 예상되면 프로그램에 버그가 있음을 나타내는 것이 표시 Optional.of(foobar)
되므로 사용 하는 것이 훨씬 좋습니다 NullPointerException
. 사용 Optional.ofNullable(foobar)
하고 버그 foobar
로 null
인해 발생 하는 경우 프로그램이 자동으로 잘못 작동하여 더 큰 재앙이 될 수 있습니다. 이렇게하면 나중에 오류가 발생할 수 있으며 오류가 발생한 시점을 이해하기가 훨씬 더 어려워집니다.
답변
또한 객체가 null 인 경우 코드가 작동하지 않아야한다는 것을 알고 있으면 다음을 사용하여 예외를 throw 할 수 있습니다 Optional.orElseThrow
String nullName = null;
String name = Optional.ofNullable(nullName).orElseThrow(NullPointerException::new);
답변
시나리오에 따라 다릅니다.
비즈니스 기능이 있고 그 가치가있는 것을 더 처리해야하지만 null
처리시 가치가있는 것이 가치가 있다고 가정 해 봅시다 .
그런 경우을 사용할 수 있습니다 Optional<?>
.
String nullName = null;
String name = Optional.ofNullable(nullName)
.map(<doSomething>)
.orElse("Default value in case of null");
답변
어쨌든 서비스 결과에는 주로 옵션을 사용해야합니다. 서비스에서 당신이 가지고있는 것을 알고 결과가 있으면 Optional.of (someValue)를 반환하고 그렇지 않으면 Optional.empty ()를 반환하십시오. 이 경우 일부 값은 null이 아니어야하며 여전히 Optional을 반환합니다.