출처 - Java의 정석 기초편 (남궁 성)
1. Optional<T>
- T타입 객체의 래퍼 클래스
- null 직접 다루는 것 위험(NullPointerException), null 체크는 if문 필수(코드 지저분)
- 해결하기 위해 null 값을 Optional 객체에 넣음→null 간접적으로 다루기 가능(null 최소화 사용)
2. Optional<T>객체 생성
- of(), ofNullable()
- 참조변수 기본값 초기화: empty()
String str = "abc";
Optional<String> optVal = Optional.of(str);
Optional<String> optVal = Optional.of("abc");
Optional<String> optVal = Optional.of(new String("abc"));
Optional<String> optVal = Optional.ofNullable(null); // ok
Optional<String> optval = Optional.<Striong>empty(); // 빈 Optional객체로 초기화
3. Optional<T>객체 값 가져오기
- get()
- orElse(): 값이 null 일 때 NoSuchElementException 발생→대체 값 지정
- orElseGet(): null 대체 값 반환하는 람다식 지정
- orElseThrow(): null 일 때 지정된 예외 발생
- isPresent(): 값이 null 이면 false, 아니면 true 반환
- ifPresent(): 값이 null 아니면 람다식 실행→ 코드 간단
Optional<String> optVal = Optional.of("abc");
String str2 = optVal.orElse("");
String str3 = optVal2.orElseGet(String::new);
String str4 = optVal2.orElseThrow(NullPointerException::new);
if(Optional.ofNullable(str2).isPresent()) {
System.out.println(str2);
}
Optional.ofNullable(str2).ifPresent(System.out::println);
4. OptionalInt, OptionalLong, OptionalDouble
- 기본형 값을 감싸는 래퍼 클래스: Optional<T> 써도 되는데 성능 높이려고 사용
Optional<T> // T get()
OptionalInt // int getAsInt()
OptionalLong // long getAsLong()
OptionalDouble // double getAsDouble()
OptionalInt opt = OptionalInt.of(0); // 0을 저장, value=0
OptionalInt opt2 = OptionalInt.empty(); // 저장 값 없음, value=0
System.out.println(opt.isPresent()); // true
System.out.println(opt2.isPresent()); // false
System.out.println(opt.equals(opt2)); // false
'Java' 카테고리의 다른 글
스트림 최종연산 (0) | 2022.12.22 |
---|---|
스트림 중간연산 (0) | 2022.12.14 |
스트림(Stream) (0) | 2022.12.09 |
람다, 함수형 인터페이스, 메서드 참조 (0) | 2022.12.08 |
쓰레드 메서드 (0) | 2022.11.19 |