[java] Optional.ofNullable보다 Optional.of를 사용하는 이유는 무엇입니까?

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)하고 버그 foobarnull인해 발생 하는 경우 프로그램이 자동으로 잘못 작동하여 더 큰 재앙이 될 수 있습니다. 이렇게하면 나중에 오류가 발생할 수 있으며 오류가 발생한 시점을 이해하기가 훨씬 더 어려워집니다.


답변

또한 객체가 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을 반환합니다.


답변