#.optional<T>
-null이 올 수 있는 값을 감싸는 wrapper클래스
-null을 참조하더라도 NPE(NullPointException)이 발생하지 않도록 해준다.
1.Optional.empty() - null인 경우
-Optional은 Wrapper클래스이기 때문에 값이 없을 수도 있다.
-이 경우에 Optional.empty()을 활용하면 된다.
Optional<String> s = Optional.empty();
System.out.println(s); //Optional.empty() = null
System.out.println(s.isPresent()); //null이기 때문에 false
2.Optional.of() - 값이 null이 아닌 경우
-데이터가 절대 null이 아니라면 Optional.of()로 생성할 수 있다.
-Optional.of()로 Null을 저장하려고 하면 NPE가 발생한다.
3.Optional.ofNullable() - 값이 null일 수도, 아닐 수도 있는 경우
-데이터가 null이 올 수 도 있고, 아닐 수도 있는 경우 .Optional.ofNullable로 생성할 수 있다.
-이 후 orElse 또는 orElseGet 메소드를 이용해서 값이 없는 경우라도 값을 가져올 수 있다.
Optional<String> optional = optional.ofNullable(getName()); //optional값이 null 일 수도 아닐 수도
String name = optional.orElse("anonymous"); //값이 없다면 "anonymous"를 리턴
예시)
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 "우편번호 없음";
}
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("우편번호 없음");
}
이름을 대문자로 변경하는 코드
String name = getName();
String result = "";
try {
result = name.toUpperCase();
} catch (NullPointerException e) {
throw new CustomUpperCaseException();
}
Optional적용
Optional<String> nameOpt = Optional.ofNullable(getName());
String result = nameOpt.orElseThrow(CustomUpperCaseExcpetion::new)
.toUpperCase();
'JAVA' 카테고리의 다른 글
[JAVA] startsWith()/endsWith() - 특정 문자로 시작하거나 끝 (0) | 2023.07.14 |
---|---|
[Code]substring(), lastIndexOf() (0) | 2023.06.01 |
JAVA - 컬렉션(Collection)과 제네릭(Generics) (1) | 2022.12.22 |
JAVA - 인터페이스와 추상클래스 비교 (0) | 2022.12.20 |
JAVA - 인터페이스 (0) | 2022.12.20 |