기록과 정리

Java Optional 본문

IT/Java

Java Optional

zepetto 2021. 8. 23. 19:25

이 글은 백기선님의 '더 자바, Java 8' 강의를 참고하였습니다.

https://www.inflearn.com/course/the-java-java8/lecture/48041?speed=1&tab=curriculum 

 

더 자바, Java 8 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

소개

자바 8에 새롭게 추가된 인터페이스 optional 은 비어있거나 null 체크를 유용하게 도와준다.

null 체크 로직

위와 같이 개발자가 null check를 하던, util을 사용하던 NullPointException을 피하기 위해 다음과 같은 코딩을 하지만 '사람'이기때문에 해당 로직을 처리하지않고 프로그래밍을 할 수있다. 자바 8 이전에는 별다른 대안이 없었다.

Progress에서 사용자 Exception 발생

checked Exception을 던지면 에러처리를 강제하는 문제가 생기며, 자바는 stack trace를 발생되는데 에러에 대한 정보자체를 담는것 자체로 리소스 낭비라고 할 수 있다.

-> 정말 필요한 경우에만 에러를 처리하고 로직을 처리할 때 에러를 처리하는 것은 좋은 코드를 보장하지 못한다.

 

명시적으로 코딩하는 방법이 Optional이라고 할 수 있다.

optional

Optional로 감싸게 되면 Optional 이란 Box안에 객체를 담게 되는데 , 박스안에는 내용물이 없을수도 있을수도 있다. 위의 코드 처럼 ofNullable은 'null일 수 있다'라고 알려주는 것에 해당한다.

 

권장 사항

1. return 값으로 사용하자 

의도하던 의도하지 않던 호출하는 쪽에서 null을 파라미터로 넘겨서, null을 return하는 경우도 발생 

optional을 쓰는 의미가 없다 

또한 Map의 Key Type을 Optinal을 사용하지말자. Map의 Key는 Null일 수 없다. 이러한 가장큰 특징을 무시하는 행위므로 좋지 않은 코드다. 인스턴스의 타입도 마찬가지로 null일 이유가 없음

 

2. Primitive Type의 Optional은 따로있지만 내부에서 boxing/unboxing이 일어나므로 OptionalInt.of(10)과 같은 권장 메서드를 사용하자.

 

3. Optianal을 return 하는 메서드에서 null을 return 하지 말자.

정말로 return 할 것이 없는 경우 , Optional.empty()를 활용하자

4. Collection, Map, Stream Array, Optional 등 자체로 Null을 감쌀수 있는 컨테이너 성격의 인스턴스에 또 Optional로 감싸지 말것. 두번 감싸는 경우가 되버린다.

 

Optional API

main 함수
해당 optional 객체를 하나 만들어주자.

- orElse : 있거나 없더라도 새로운 클래스를 만든다. 무조건 실행이 되는 코드라고 보면 된다.

- orElseGet : 동적으로 행위 또는 작업을 추가 해준다. orElse를 보완

있으면 가져오고 없으면 새로운 클래스를 만들어준다.
"spring"으로 시작하는 강의가 없다면 새로운 강의를 생성하는 메서드

- orElseThrow : 없으면 Exception을 발생한다.

그외에도 flatmap, isEmpty, filter, map등이 다양한 메서드가 존재한다. 유용한 3가지만 정리해보았음.

'IT > Java' 카테고리의 다른 글

자바의 정석 6장) 객체지향 프로그래밍 1  (0) 2021.12.06
Date와 Time API  (0) 2021.08.31
Java8 Stream API (스트림 API)  (0) 2021.08.12
기본 메서드와 스태틱 메서드  (0) 2021.08.03
Iterator/ListIterator/Enumeration 란?  (0) 2021.07.30