JAVA Optional<T>

강정우·2022년 11월 19일
0

JAVA

목록 보기
28/31
post-thumbnail

1. Optional<T> 란?

  • T 타입 객체의 래퍼 클래스이다.
public final class Optional<T>{
	private final T value;		// T타입의 참조변수
    ...
}
  • 여기서 value에 모든 종류의 객체를 저장할 수 있다. null 포함

why?

  1. null을 간접적으로 다루기 위함.
  • null을 직접 다루는 것은 위험하다 왜냐면 NullpointException이 일어날 수 있기 때문이다.
  1. null체크를 쉽고 간결하기 하기위함
  • 기존에 null checking은 if문으로 하여 코드가 더러워지지만 이 Optional을 사용하면 훨씬 깔끔하게 처리할 수 있다.
  • null값을 바로 담는 것이 아닌 Optional 객체의 null value로 point를 한다.

2. Optional<T> 객체 생성하기

// OK
String str = "abc";
Optional<String> optVal = Optional.of(str);

// OK short.ver
Optional<String> optVal = Optional.of("abc");

// NullPointException 발생
Optional<String> optVal = Optional.of(null);

// OK
Optional<Stirng> optVal = Optional.ofNullable(null);

// 초기화
Optional<String> optVal = Optional.<String>empty(); // 이때 <String> 생략가능

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;	// 값이 저장되어 있으면 true
    private final int value;			// int 타입의 변수
}

1) OptionalInt의 값 가져오기 - int getAsInt()

2) 빈 Optional객체와의 비교

OptionalInt opt = OptionalInt.of(0);		// true   => 얘는 0이 저장
OptionalInt opt2 = OptionalInt.empty();		// false  => 얘는 ㄹㅇ 비어있음
  • 위 두 식을 isPresent를 찍어보면 결과값을 받아볼 수 있다.
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글