[자바(java)]Optional

allnight5·2022년 12월 13일
0

자바 개념정리

목록 보기
24/28

참조 사이트
[ NPE(NullPointerException) 이란? ]
개발을 할 때 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다. NPE를 피하려면 null 여부를 검사해야 하는데, null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거롭다. 그래서 null 대신 초기값을 사용하길 권장하기도 한다.
wrap, unwrap, Wrapper
그래서 Java8부터 나온것이 Optional로
Optional클래스를 사용하여 NPE를 방지하도록 도와주는데
Optional은 null 또는 값을 감싸서 NPE(NullPointerException)로부터 부담을 줄이기 위해 등장한 Wrapper 클래스이다.
Optional은 메소드의 결과가 null이 될 수 있으며, null에 의해 오류가 발생할 가능성이 매우 높을 때 반환값으로만 사용되어야 한다
하지만 NPE를 방지하기 위하여 Optional을 사용하였는데 값의 존재 여부를 판단하지 않고 접근한다면 다른 예외가 발생한다.
optional이 갖는 value가 없으면 NoSuchElementException 발생
Optional은 직렬화를 지원하지 않아서 캐시나 메세지큐 등과 연동할 때 문제가 발생할 수 있다.
[ 올바른 Optional 사용법 가이드 ]
Optional 변수에 Null을 할당하지 말아라
값이 없을 때 Optional.orElseX()로 기본 값을 반환하라
단순히 값을 얻으려는 목적으로만 Optional을 사용하지 마라
생성자, 수정자, 메소드 파라미터 등으로 Optional을 넘기지 마라
Collection의 경우 Optional이 아닌 빈 Collection을 사용하라
반환 타입으로만 사용하라

orElse와 orElseGet


orElse: 파라미터로 값을 받는다.
orElseGet: 파라미터로 함수형 인터페이스(함수)를 받는다.
orElse로는 값이, orElseGet로는 함수가 넘어간다 차이가 있다.

public T orElse(T other) {
	return value != null ? value : other;
} 
  
public T orElseGet(Supplier<? extends T> other) {
	return value != null ? value : other.get();
} 

orElse와 orElseGet의 차이점 및 사용법 정리

orElse
파라미터로 값을 필요로한다.
값이 미리 존재하는 경우에 사용한다.
orElseGet
파라미터로 함수(함수형 인터페이스)를 필요로 한다.
값이 미리 존재하지 않는 거의 대부분의 경우에 orElseGet을 사용하면 된다.

profile
공부기록하기

0개의 댓글