더 나은 내일의 내가 되자!
Optional 본문
자바 8부터 NPE(NullPointerException) 처리의 가독성을 위해 생겼습니다.
Optional이란?
- 존재할수도 있지만 안할 수도 있는 객체, null이 될 수도 있는 객체를 감싸고 있는 일종의 래퍼 클래스이다
Optional의 효과
- 명시적으로 해당 변수가 null일 수도 있다는 가능성을 표현할 수 있다
- NPE를 유발할 수 있는 null을 직접 다루지 않는다
- null체크를 직접 하지 않는다
Optional사용법
// 선언
Optional<Member> optMbr;
// null을 담고 있는 Optional 객체
Optional<Member> optMbr = Optional.empty();
// null이 아닌 객체를 담고 있는 Optional 객체를 생성
// null이 넘어올 경우, NPE를 던지기 때문에 주의해서 사용
Optional<Member> optMbr = Optional.of(member);
// null이 넘어오면 비어있는 Optional 객체를 반환
// null이 있는지 없는지 모를 경우 사용
Optional<Member> optMbr = Optional.ofNullable(member);
// 객체가 존재하면 true, 비어있는 경우 false
if (optMbr.isPresent()) { System.out.println(optMbr.get()); }
// 객체가 존재하면 작업을 진행
// return void
optMbr.ifPresent(item -> System.out.println(item));
// 비어있는 Optional 객체에 대해서, NoSuchElementException을 던짐
// 비어있지 않은 Optional에 사용해야 함
optMbr.get();
// 옵셔널이 비어 있다면 파라미터로 입력한 인자를 리턴하게 됨
optMbr.orElse(T other);
// 비어있는 Optional 객체에 대해서, 넘어온 함수형 인자를 통해 생성된 객체를 반환
// orElse(T other) 메소드와 동일하게 리턴 하지만 비어있는 경우만 함수를 호출해서 성능상 이점 기대 가능
optMbr.orElseGet(Supplier<? extends T> other);
//비어 있는 Optional객체에 대해, 넘어온 함수형 인자를 통해 생성된 예외를 던짐
optMbr.orElseThrow(Supplier<? extends X> exceptionSupplier);
/* 활용예 */
Optional.ofNullable(member)
.map(Member::getName)
.orElse("prunier");
'프로그래밍 > JAVA' 카테고리의 다른 글
Junit5 - @AfterEach (0) | 2021.07.15 |
---|---|
람다식 :: (0) | 2021.07.15 |
스트림(Stream) 간단히 (0) | 2021.07.15 |
자바8 (JDK 1.8) 환경설정 (0) | 2021.03.13 |