본문 바로가기

Java

Optional<T>객체

출처 - 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