IT이야기

Optional.of.OfNullable보다 Optional.of를 사용하는 이유

cyworld 2022. 5. 28. 10:13
반응형

Optional.of.OfNullable보다 Optional.of를 사용하는 이유

Java 8을 사용하는 경우Optionalclass, 값을 옵션으로 래핑할 수 있는 방법은 두 가지가 있습니다.

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인 경우 코드가 작동하지 않아야 한다는 것을 알고 있는 경우 다음을 사용하여 예외를 발생시킬 수 있습니다.

String nullName = null;

String name = Optional.ofNullable(nullName)
                      .orElseThrow(NullPointerException::new);
                   // .orElseThrow(CustomException::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()를 반환합니다.이 경우 someValue는 null이 아니어도 Optional이 반환됩니다.

언급URL : https://stackoverflow.com/questions/31696485/why-use-optional-of-over-optional-ofnullable

반응형