반응형
Optional<T> 는 지네릭 클래스로 T타입의 객체를 감싸는 래퍼 클래스이다.
Optional 타입에는 모든 타입의 참조변수를 담을 수 있다.
public final class Optional<T> {
private final T value; // T 타입의 참조변수
...
}
}
* java.util.Optional은JDK 1.8부터 추가됨.
장점 : Optional 클래스 사용 시 널 체크를 내부에서 처리하여 코드의 복잡도를 낮출 수 있다. isNull, nonNull, requireNonNull()과 같은 메서드를 통해서! → NullPointerException이 발생하지 않는 코드작성이 가능하다는 이야기이다!
관련 Method
- Optional객체 생성
Optional.of(T)
Optional.ofNullable(T)
Optional.empty()
- 값 가져오기
optVal.get()
optVal.orElse("대체할 리턴 값");
optVal.orElseGet(Supplier);
- 기타
isEmpty() : 비었는지 확인
isPresent() : 값이 존재하는지 확인
ifPresent(Consumer) : 값이 존재할 경우 액션까지
아래는 개인적으로 연습한 코드이다.
String s = "abs";
Optional<String> optVal = Optional.of(s);
optVal = Optional.of(s);
optVal = Optional.ofNullable(null); // null 가능성이 있을 경우
optVal = Optional.empty(); // 초기화 시에는 null 대신 empty로 초기화!
// System.out.println(optVal.get()); // empty인 상태에서 get을 하면 NoSuchElementException발생.
System.out.println(optVal.orElse("null임")); // optVal가 empty일 때 return할 default값 설정
System.out.println(optVal.orElseGet(String::new));
// System.out.println(optVal.orElseThrow(NullPointerException::new));
optVal = Optional.of(s);
System.out.println(optVal.get());
System.out.println(optVal.isEmpty());
System.out.println(optVal.isPresent());
optVal = Optional.of("123");
int i = optVal.filter(az -> az.length() > 0).map(Integer::parseInt).orElse(-1);
optVal =Optional.of("");
System.out.println("i : " + i);
int j = optVal.filter(az -> az.length() > 0).map(Integer::parseInt).orElse(-1);
System.out.println("j: " + j);
optVal = Optional.of("ASDFE");
if(optVal.isPresent()) System.out.println("isPresent() : true");
optVal.ifPresent(System.out::println); // Consumer를 인자로 받는다.
반응형
'Java' 카테고리의 다른 글
[Java] List정렬(sort)/ Collections.sort, List.sort (0) | 2023.02.11 |
---|---|
[Java] 스트림 - Stream : 효율적인 데이터 다루기! (0) | 2022.09.18 |
[Java] Wrapper 클래스 : 기본 타입의 데이터를 객체로 취급하다.( 오토박싱, 오토언박싱) (0) | 2022.09.03 |
[Java] 람다식 - Lambda Expression (0) | 2022.08.29 |
[Java] BigDecimal - Java에서 정밀한 숫자 표현하기 (0) | 2022.08.24 |
댓글