Optioanl이란?

YH·2023년 3월 26일
0

Optional이란?

  • Optioanl는 null 값이 가능한 T타입의 객체를 감싸는 Wrapper 클래스로, NPE(Null Point Exception)이 발생하지 않도록 해준다.
  • Optional은 데이터를 Wrapping하고 Null일 경우 처리하는 함수 등의 오버헤드가 있으므로 Nullable한 값이 아니라면 사용하지 않는 것이 낫다.

Optioanl의 장/단점

장점

  • 명시적으로 변수에 대한 null 가능성을 표현할 수 있음
  • null 체크를 직접하지 않아도 됨
  • Null Point Exception이 발생할 가능성이 있는 값을 직접 다룰 필요가 없음

단점

  • Wrapper 클래스이기 때문에 두 개의 참조를 가지므로 오버헤드가 존재
  • 직렬화(Serialize)가 불가능하기 때문에 클래스의 인스턴스 필드로 사용하면 안됨
  • 필드로 사용하도록 고안된 것이 아니기 때문에 값을 반환하는 용도로 사용해야 함

Optional 객체 생성

//빈 객체 생성
1. Optional<String> optEmpty = Optional.empty(); 
//of의 경우 null 값이 절대 올 수 없는 경우 사용
2. Optional<String> optNotNull = Optional.of("test") 
//null 값이 올 수도 있고 안 올수도 있는 경우, ofNullable 사용
3. Optioanl<String> optNullable = Optional.ofNullable(myService.getId()); 

orElse(), orElseGet(), orElseThrow()

  • orElse() : 값이 존재하면 값을 반환, 값이 없는 경우 인수로 전달된 값을 반환
  • orElseGet() : 값이 존재하면 값을 반환, 값이 없는 경우 파라미터로 전달된 함수형 인터페이스 (함수)의 결과를 반환
  • orElseThrow() : 값이 존재하면 값을 반환, 값이 없는 경우 인수로 전달된 Exception을 발생

orElse() 와 orElseGet() 차이점

  • orElse()는 값의 존재 유무와 관계 없이, 인수로 함수가 전달된 경우 함수가 반드시 실행 됨.

  • orElseGet()은 값이 없을 경우에만 인수로 전달된 함수가 실행 됨

  • 대부분의 경우 orElseGet()을 사용하는 것이 좋다.

    orElse()orElseGet()
    파라미터로 값을 필요파라미터로 함수(함수형 인터페이스)를 필요
    값이 미리 존재하는 경우 사용값이 미리 존재하지 않는 경우 사용

Optional을 올바르게 사용하는 방법

Optional 사용 Method




<참고 URL>

profile
하루하루 꾸준히 포기하지 말고

0개의 댓글