💡 Optional 이란?
Optional<T> 는 nul이 올 수 있는 값을 감싸는 Wrapper 클래스!
NPE가 발생하지 않도록 도와준다.
* NPE (NullPointerException) 이란? : null값으로 인해 발생하는 에러!
- Optional은 Wrapper 클래스이기 때문에 값이 없을 수도 있는데, 이때는 Optional.empty()로 생성할 수 있다!
- Optional.of() - 값이 Null이 아닌 경우 사용 => Optional.of()로 Null을 저장하려고 하면 NPE 발생함
- Optional.ofNullable - 값이 Null일 수도, 아닐 수도 있는 경우 사용
👉 Optional의 orElse와 orElseGet 차이 및 예시 코드
- orElse : 파라미터로 값을 받는다.
=> 값이 미리 존재하는 경우에 사용한다.
=> 해당 값이 null이든 아니든 관계없이 항상 불린다. - orElseGet : 파라미터로 함수형 인터페이스(함수)를 받는다.
=> NULL 값이 있어야 실행 가능!
=> 해당 값이 null일 때만 불린다.
public T orElse(T other) {
return value != null ? value : other;
}
public T orElseGet(Supplier <? extends T> other) {
return value != null ? value : other.get();
}
public void findUserEmailOrElse() {
String userEmail = "Empty";
String result = Optional.ofNullable(userEmail)
.orElse(getUserEmail());
System.out.println(result);
}
public void findUserEmailOrElseGet() {
String userEmail = "Empty";
String result = Optional.ofNullable(userEmail)
.orElseGet(this::getUserEmail);
System.out.println(result);
}
private String getUserEmail() {
System.out.println("getUserEmail() Called");
return "a@naver.com";
}
// 1. orElse인 경우
getUserEmail() Called
Empty
// 2. orElseGet인 경우
Empty
public void findUserEmailOrElse() {
String userEmail = " ";
String result = Optional.ofNullable(userEmail)
.orElse(getUserEmail());
System.out.println(result);
}
public void findUserEmailOrElseGet() {
String userEmail = " ";
String result = Optional.ofNullable(userEmail)
.orElseGet(this::getUserEmail);
System.out.println(result);
}
private String getUserEmail() {
System.out.println("getUserEmail() Called");
return "a@naver.com";
}
// 1. orElse인 경우
getUserEmail() Called
a@naver.com
// 2. orElseGet인 경우
getUserEmail() Called
a@naver.com
👉 orElse
public T orElse(getUserEmail()) {
return value != null ? value : getUserEmail();
}
=> null이 아니면 getUserEmail 함수를 호출하고 당연히 그 안에 있는 System.out.println 값도 표시된다.
👉 orElseGet
public T orElseGet(Supplier<? extends T> other) {
return value !=null ? value : other.get();
}
=> 일단 메소드를 전달하고 value가 null이면 other.get() 메소드를 실행한다.
=> orElse와 동일하게 null이 아닐 때도 value를 반환하지만 그것의 파라미터 타입이 다르다. true여야 실행이 되는데 null이 아니기 때문에 해당 함수 실행도 안해도 되기 때문이다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] 변수 (0) | 2023.04.05 |
---|---|
[JAVA] 자바를 시작하기 전에 (0) | 2023.04.05 |
[JAVA] Getter & Setter (0) | 2023.04.04 |
[JAVA] 오버로딩과 오버라이딩 (0) | 2023.04.04 |
[JAVA] 메모리 (0) | 2023.04.04 |