Optional이란?
- 개발을 할 때 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다. NPE를 피하려면 null 여부를 검사 해야 하는데 null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거로워 지기 때문에 이를 방지할수 있도록 도와준다.
-Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.
Optional 활용하기
Optional.empty() - 값이 Null인 경우
Optional은 Wrapper 클래스이기 때문에 값이 없을 수도 있는데, 이때는 Optional.empty()로 생성할 수 있다.
Optional<String> optional = Optional.empty();
System.out.println(optional); // Optional.empty
System.out.println(optional.isPresent()); // false
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
Optional.of() - 값이 Null이 아닌 경우
만약 어떤 데이터가 절대 null이 아니라면 Optional.of()로 생성할 수 있다. 만약 Optional.of()로 Null을 저장하려고 하면 NullPointerException이 발생한다.
Optional.ofNullable() - 값이 Null일수도, 아닐수도 있는 경우
만약 어떤 데이터가 null이 올 수도 있고 아닐 수도 있는 경우에는 Optional.ofNullable로 생성할 수 있다.
그리고 이후에 orElse 또는 or ElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.
// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("anonymous"); // 값이 없다면 "anonymous" 를 리턴
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
사용법 예시
public String findPostCode() {
UserVO userVO = getUser();
if (userVO != null) {
Address address = user.getAddress();
if (address != null) {
String postCode = address.getPostCode();
if (postCode != null) {
return postCode;
}
}
}
return "우편번호 없음";
}
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
위 코드는 null 검사 때문에 상당히 복잡하다.
하지만 Optional을 사용하면 이 코드를 아래와 같이 표현할 수 있다.
public String findPostCode() {
// 위의 코드를 Optional로 펼쳐놓으면 아래와 같다.
Optional<UserVO> userVO = Optional.ofNullable(getUser());
Optional<Address> address = userVO.map(UserVO::getAddress);
Optional<String> postCode = address.map(Address::getPostCode);
String result = postCode.orElse("우편번호 없음");
// 그리고 위의 코드를 다음과 같이 축약해서 쓸 수 있다.
String result = user.map(UserVO::getAddress)
.map(Address::getPostCode)
.orElse("우편번호 없음");
}
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
'😀Language > Java' 카테고리의 다른 글
[Test] contains를 이용한 테스트 (0) | 2024.10.27 |
---|---|
Arrays.asList() 와 List.of() 정리 (0) | 2024.10.17 |
정적 팩토리 메서드(Static Factory Method)란? (2) | 2024.10.03 |
Optional<T> isPresent(), ifPresent(), orElseThrow (0) | 2024.03.14 |
[람다와 스트림] (0) | 2024.03.14 |
Optional이란?
- 개발을 할 때 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다. NPE를 피하려면 null 여부를 검사 해야 하는데 null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거로워 지기 때문에 이를 방지할수 있도록 도와준다.
-Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.
Optional 활용하기
Optional.empty() - 값이 Null인 경우
Optional은 Wrapper 클래스이기 때문에 값이 없을 수도 있는데, 이때는 Optional.empty()로 생성할 수 있다.
Optional<String> optional = Optional.empty();
System.out.println(optional); // Optional.empty
System.out.println(optional.isPresent()); // false
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
Optional.of() - 값이 Null이 아닌 경우
만약 어떤 데이터가 절대 null이 아니라면 Optional.of()로 생성할 수 있다. 만약 Optional.of()로 Null을 저장하려고 하면 NullPointerException이 발생한다.
Optional.ofNullable() - 값이 Null일수도, 아닐수도 있는 경우
만약 어떤 데이터가 null이 올 수도 있고 아닐 수도 있는 경우에는 Optional.ofNullable로 생성할 수 있다.
그리고 이후에 orElse 또는 or ElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.
// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("anonymous"); // 값이 없다면 "anonymous" 를 리턴
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
사용법 예시
public String findPostCode() {
UserVO userVO = getUser();
if (userVO != null) {
Address address = user.getAddress();
if (address != null) {
String postCode = address.getPostCode();
if (postCode != null) {
return postCode;
}
}
}
return "우편번호 없음";
}
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
위 코드는 null 검사 때문에 상당히 복잡하다.
하지만 Optional을 사용하면 이 코드를 아래와 같이 표현할 수 있다.
public String findPostCode() {
// 위의 코드를 Optional로 펼쳐놓으면 아래와 같다.
Optional<UserVO> userVO = Optional.ofNullable(getUser());
Optional<Address> address = userVO.map(UserVO::getAddress);
Optional<String> postCode = address.map(Address::getPostCode);
String result = postCode.orElse("우편번호 없음");
// 그리고 위의 코드를 다음과 같이 축약해서 쓸 수 있다.
String result = user.map(UserVO::getAddress)
.map(Address::getPostCode)
.orElse("우편번호 없음");
}
출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
'😀Language > Java' 카테고리의 다른 글
[Test] contains를 이용한 테스트 (0) | 2024.10.27 |
---|---|
Arrays.asList() 와 List.of() 정리 (0) | 2024.10.17 |
정적 팩토리 메서드(Static Factory Method)란? (2) | 2024.10.03 |
Optional<T> isPresent(), ifPresent(), orElseThrow (0) | 2024.03.14 |
[람다와 스트림] (0) | 2024.03.14 |