본문 바로가기

JAVA

Optional<T>

<T>타입의 래퍼 클래스 - optional<T>

래퍼클래스 = Integer 나 Long 등

 

public final class Optional<T>{

 private final T value; // T타입의 참조변수를 가지고 있다.

}

 

어떤 타입이든가 전부 저장할수 있다. null도 저장가능

 

Optional의 필드 이유

1.null을 직접 다루는것은 위험하다. nullpointException이 발생한다.

그래서 간접적으로 null을 다루이 위함이다.

2.null체크작업을 안해도 된다.

3.result null 을 하던것을 optional 객체에 null을 넣어서 반환.

 

optional 객체 생성하기

String str = "abc";

Optional<String> optval = optional.of(str);

Optional<String> optval = optional.of("abc");

Optional<String> optval = optional.of(null); 

//optional 에 이렇게 그냥 null을 넣으면 nullPointException 이 발생한다.

Optional<String> optval = optional.ofNullable(null);

//null을 넣을땐 꼭 ofNullable로 넣어줘야 한다.

 

null대신 빈 Optional<T> 객체를 사용하자.

Optional<String> optval = null; //가능은 하나 바람직하지 ㅇ낳음

Optional<String> optval = Optional<String>empty() //빈객체로 초기화

 

Optional<T> 객체의 값 가져오기

Optional<String> optval = optional.of("abc");

String str1 = optval.get(); //optval에 지정된 값을 반환 , null 이면 예외 발생

String str2 = optval.orElse(); // optval에 지정된 값이 null이면 ""을 반환

String str3 = optval.orElseGet(String::new); // 람다식 사용가능 () -> new String();

String str4 = optval.orElesThrow (NullpointException::new) //null이면 에러 발생

 

isPresent() = Optional객체의 값이 null 이면 false , 아니면 true를 반환

 

if(optional.ofNullable(str).isPresent()) {}

 

ifPersent = optional 객체값이 null이 아닐때만 작업 수행

 

OptionalInt , OptionalLong , OptionalDouble

기본형 값을 감싸는 레퍼클레스

 

public final class OptionalInt{

 private final boolean isPersent; //값이 저장되어 있다면 true

 private final int value; //int 타입의 변수

}

 

Optional<T> 도 여도 상관없지만

다운캐스팅등을 생략할수 있어서 특정 타입의 Optional을 사용

 

OptionalInt값 가져오기 int getAsInt()

각 타입별로 값을 가져오는 메서드가 다르다

optional <T> T get();

optionalInt int getAsInt();

optionalLong long getAsLong();

optionalDouble double getAsDouble();

 

빈 Optional객체와의 비교

OptionalInt opt = optionalInt.of(0)  // optionalInt에 0을 저장

OptionalInt opt2 = optionalInt.empty() ; //optionalInt에 0저장

isPresent 가 0인지 아무것도 없는지 구별해준다.