[Java] Optional 메모
기존 코드와 연결되지 않는 Optional
최근에 처음으로 업무에서 사용하게 되어 기쁩니다. 다음에도 사용할 수 있도록 사용례의 노트입니다.
2019년 완전히 새로운 사건에서 자바 1.6의 현장 사용이 강제되었다.
이 시기가 되면 자바8을 접할 기회가 많지 않다.
이런 상황에서 "자바8부터 null 검사는 간단하게 쓸 수 있을 것 같다"고 자바8이 등장했을 때 들은 메시지로 썼다.
여러 사이트를 확인하고 적어놨지만 바삭바삭한 개선법이 있다면 꼭 댓글로 남겨주세요.
(내 코드 심사 평론가가 안건에 없기 때문에) (다른 구성원의 심사는 내가 한 것이다)
get 정보
사용하는 곳을 몰라서 사용하지 않았습니다.
몇 개의 사이트를 봤더니'get
사용하지 말라는 론'이 오히려 정답이었죠?감각이 있다.
주의사항
"Optional은 전통적인 null 검사를 간단하게 대체할 수 있다"는 것은 정확한 인식이 아니다.
"Optional을 사용하면 null 검사를 잊어버릴 가능성을 없애기 위해 null 검사를 강제할 수 있습니다"는 것이 맞습니다...
따라서 샘플 코드는 이동하지만 Optional의 사용 방법으로서 정확한 인식을 바탕으로 쓴 코드는 아니다.
이 기사를 잊지 않기 위해 삭제하지 않고 남기지만, "Optional 처음~!"나 같은 사람은 걸리지 않도록 주의하세요.
@sikani선생님, 감사합니다.역시 유식한 사람들이 댓글을 달지 않으면 안 되는데...
불행 중 다행인 것은 다른 사람의 댓글에 Optional에 적힌 것을 열거하지 않았다는 것이다.(Java8 스타일의 코드를 강제로 사용하지 않는 사건이기 때문에)
예제 코드
Java1.6는 일부러 그런 식으로 쓴다.Java8 잘 썼어요.
Java8잘못 썼어요.
자바1.6이라도 세 가지 연산자 하나의 패드로 쓸 수 있다...ret는 낭비일 뿐 아리의 보답도 하지 않는다.if~else가 사용하고private 방법도 끊지 않는다. 매번if파일의 유형이 있는 현장은 대부분이 진실하지 않은 코드이기 때문에 재구성을 통해 항상 죽는다.더 나아가 자바8을 사용하더라도 자바1.6의 작법은 구성원이 너무 많아서 가장 빨리 웃는다.의식이 높은 계로 오해할 것 같아서 곤란한데... 요즘 시끌벅적한 격상하 논쟁이 생각난다.불평해서 미안해요.
Java1.6public String toStringIfNotNull(final Object obj) {
String ret;
if (obj == null) {
ret = null;
} else {
ret = obj.toString();
}
return ret;
}
Java8public String toStringIfNotNull(final Object obj) {
return Optional.ofNullable(obj).map(Object::toString).orElse(null);
}
null 검사 대신 Optional을 사용하면 of
보다 ofNullable
와 orElse
의 조합이 최선이죠!?이런 인상.
비어 있지 않으면 원래의 값을 되돌려주거나map
나 중간 처리?그냥 필요 없어요.map
외에 filter
과flatMap
도 있다.filter
null과filter 결과가false일 때orElse
의 매개 변수를 되돌려줍니다.flatMap
null일 때 orElse
되돌아오는 매개 변수이지만, flatMap 처리 결과가null일 경우 빈 PointerException을 던집니다.map
의 경우 처리 결과가 비어 있어도 매개변수가 반환됨
빈 값으로 되돌아오는 것이 아니라 분기 처리된 경우 orElse
를 쓰면 됩니다!
또한 if (Optional.ofNullable(obj).isPresent())
진위값만 되돌려주고 isPresent
파라미터로 람다식을 전달하면 null 이외의 경우에만 파라미터를 실행하는 람다식으로 쓸 수 있다.
하지만 자바7 이후라면 isPresentifPresent
(nonNull)보다 더 정확하게 쓸 수 있을 것 같다.
샘플 코드의 처리 내용이라면 if (Objects.isNull(obj))
(String Utils. default String 같은) 좋았을 텐데.. 확인 부족.
Reference
이 문제에 관하여([Java] Optional 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/11295/items/f2e0099276a77f02c114
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
"Optional은 전통적인 null 검사를 간단하게 대체할 수 있다"는 것은 정확한 인식이 아니다.
"Optional을 사용하면 null 검사를 잊어버릴 가능성을 없애기 위해 null 검사를 강제할 수 있습니다"는 것이 맞습니다...
따라서 샘플 코드는 이동하지만 Optional의 사용 방법으로서 정확한 인식을 바탕으로 쓴 코드는 아니다.
이 기사를 잊지 않기 위해 삭제하지 않고 남기지만, "Optional 처음~!"나 같은 사람은 걸리지 않도록 주의하세요.
@sikani선생님, 감사합니다.역시 유식한 사람들이 댓글을 달지 않으면 안 되는데...
불행 중 다행인 것은 다른 사람의 댓글에 Optional에 적힌 것을 열거하지 않았다는 것이다.(Java8 스타일의 코드를 강제로 사용하지 않는 사건이기 때문에)
예제 코드
Java1.6는 일부러 그런 식으로 쓴다.Java8 잘 썼어요.
Java8잘못 썼어요.
자바1.6이라도 세 가지 연산자 하나의 패드로 쓸 수 있다...ret는 낭비일 뿐 아리의 보답도 하지 않는다.if~else가 사용하고private 방법도 끊지 않는다. 매번if파일의 유형이 있는 현장은 대부분이 진실하지 않은 코드이기 때문에 재구성을 통해 항상 죽는다.더 나아가 자바8을 사용하더라도 자바1.6의 작법은 구성원이 너무 많아서 가장 빨리 웃는다.의식이 높은 계로 오해할 것 같아서 곤란한데... 요즘 시끌벅적한 격상하 논쟁이 생각난다.불평해서 미안해요.
Java1.6public String toStringIfNotNull(final Object obj) {
String ret;
if (obj == null) {
ret = null;
} else {
ret = obj.toString();
}
return ret;
}
Java8public String toStringIfNotNull(final Object obj) {
return Optional.ofNullable(obj).map(Object::toString).orElse(null);
}
null 검사 대신 Optional을 사용하면 of
보다 ofNullable
와 orElse
의 조합이 최선이죠!?이런 인상.
비어 있지 않으면 원래의 값을 되돌려주거나map
나 중간 처리?그냥 필요 없어요.map
외에 filter
과flatMap
도 있다.filter
null과filter 결과가false일 때orElse
의 매개 변수를 되돌려줍니다.flatMap
null일 때 orElse
되돌아오는 매개 변수이지만, flatMap 처리 결과가null일 경우 빈 PointerException을 던집니다.map
의 경우 처리 결과가 비어 있어도 매개변수가 반환됨
빈 값으로 되돌아오는 것이 아니라 분기 처리된 경우 orElse
를 쓰면 됩니다!
또한 if (Optional.ofNullable(obj).isPresent())
진위값만 되돌려주고 isPresent
파라미터로 람다식을 전달하면 null 이외의 경우에만 파라미터를 실행하는 람다식으로 쓸 수 있다.
하지만 자바7 이후라면 isPresentifPresent
(nonNull)보다 더 정확하게 쓸 수 있을 것 같다.
샘플 코드의 처리 내용이라면 if (Objects.isNull(obj))
(String Utils. default String 같은) 좋았을 텐데.. 확인 부족.
Reference
이 문제에 관하여([Java] Optional 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/11295/items/f2e0099276a77f02c114
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public String toStringIfNotNull(final Object obj) {
String ret;
if (obj == null) {
ret = null;
} else {
ret = obj.toString();
}
return ret;
}
public String toStringIfNotNull(final Object obj) {
return Optional.ofNullable(obj).map(Object::toString).orElse(null);
}
Reference
이 문제에 관하여([Java] Optional 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/11295/items/f2e0099276a77f02c114텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)