1. Optional<T> 란?
public final class Optional<T>{
private final T value;
...
}
- 여기서 value에 모든 종류의 객체를 저장할 수 있다. null 포함
why?
- null을 간접적으로 다루기 위함.
- null을 직접 다루는 것은 위험하다 왜냐면
NullpointException
이 일어날 수 있기 때문이다.
- null체크를 쉽고 간결하기 하기위함
- 기존에 null checking은 if문으로 하여 코드가 더러워지지만 이 Optional을 사용하면 훨씬 깔끔하게 처리할 수 있다.
- null값을 바로 담는 것이 아닌 Optional 객체의 null value로 point를 한다.
2. Optional<T> 객체 생성하기
String str = "abc";
Optional<String> optVal = Optional.of(str);
Optional<String> optVal = Optional.of("abc");
Optional<String> optVal = Optional.of(null);
Optional<Stirng> optVal = Optional.ofNullable(null);
Optional<String> optVal = Optional.<String>empty();
3. Optional<T> 객체 값 가져오기
- get() : Optional 객체에 저장된 값을 반환. null이면 예외발생
- orElse(내용) : Optional 객체에 저장된 값이 null일 때는, 내용를 반환
- orElseGet() : lambda식 사용 가능
() -> new String()
- orElseThrow() : null이면 예외 발생
Optional<String> optVal = Optional.of("abc");
String str1 = optVal.get();
String str2 = optVal.orElse("");
String str3 = optVal.orElseGet(String::new);
String str3 = optVal.orElseGet(Supplier<? extends T> other);
String str4 = optVal.orelseThrow(Supplier<? extends X> exceptionSupplier);
- isPresent() : Optional 객체의 값이 null이면 flase, 아니면 true를 반환
if(Optional.ofNullable(str).isPresent(System.out::pringln);
4. 기본형 값을 감싸는 래퍼 클래스
- 성능이 조금 더 좋기 때문에 사용.
- OptionalInt
- OptionalLong
- OptionalDouble
public final class OptaionalInt{
...
private final boolean isPreseng;
private final int value;
}
1) OptionalInt의 값 가져오기 - int getAsInt()
2) 빈 Optional객체와의 비교
OptionalInt opt = OptionalInt.of(0);
OptionalInt opt2 = OptionalInt.empty();
- 위 두 식을
isPresent
를 찍어보면 결과값을 받아볼 수 있다.