일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 1
- git #gitlab #github
- zepettoworld.com
- Bean
- layout #thymeleaf #화면분할
- 스프링 부트
- autowired
- Component
- DispatcherServlet
- spring
- 오토와이어드
- 스프링
- Today
- Total
기록과 정리
Java Optional 본문
이 글은 백기선님의 '더 자바, Java 8' 강의를 참고하였습니다.
https://www.inflearn.com/course/the-java-java8/lecture/48041?speed=1&tab=curriculum
소개
자바 8에 새롭게 추가된 인터페이스 optional 은 비어있거나 null 체크를 유용하게 도와준다.
위와 같이 개발자가 null check를 하던, util을 사용하던 NullPointException을 피하기 위해 다음과 같은 코딩을 하지만 '사람'이기때문에 해당 로직을 처리하지않고 프로그래밍을 할 수있다. 자바 8 이전에는 별다른 대안이 없었다.
checked Exception을 던지면 에러처리를 강제하는 문제가 생기며, 자바는 stack trace를 발생되는데 에러에 대한 정보자체를 담는것 자체로 리소스 낭비라고 할 수 있다.
-> 정말 필요한 경우에만 에러를 처리하고 로직을 처리할 때 에러를 처리하는 것은 좋은 코드를 보장하지 못한다.
명시적으로 코딩하는 방법이 Optional이라고 할 수 있다.
Optional로 감싸게 되면 Optional 이란 Box안에 객체를 담게 되는데 , 박스안에는 내용물이 없을수도 있을수도 있다. 위의 코드 처럼 ofNullable은 'null일 수 있다'라고 알려주는 것에 해당한다.
권장 사항
1. return 값으로 사용하자
의도하던 의도하지 않던 호출하는 쪽에서 null을 파라미터로 넘겨서, null을 return하는 경우도 발생
또한 Map의 Key Type을 Optinal을 사용하지말자. Map의 Key는 Null일 수 없다. 이러한 가장큰 특징을 무시하는 행위므로 좋지 않은 코드다. 인스턴스의 타입도 마찬가지로 null일 이유가 없음
2. Primitive Type의 Optional은 따로있지만 내부에서 boxing/unboxing이 일어나므로 OptionalInt.of(10)과 같은 권장 메서드를 사용하자.
3. Optianal을 return 하는 메서드에서 null을 return 하지 말자.
4. Collection, Map, Stream Array, Optional 등 자체로 Null을 감쌀수 있는 컨테이너 성격의 인스턴스에 또 Optional로 감싸지 말것. 두번 감싸는 경우가 되버린다.
Optional API
- orElse : 있거나 없더라도 새로운 클래스를 만든다. 무조건 실행이 되는 코드라고 보면 된다.
- orElseGet : 동적으로 행위 또는 작업을 추가 해준다. orElse를 보완
- 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 |