ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Optional
    JAVA 2021. 12. 17. 15:58

    Optional<T>클래스는 래퍼클래스다.

    Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있으며,

    보다 직관적인 처리를 할 수 있다.

     

     

    Optinonal 객체 생성

    //filter
    Optional.of("True").filter((value)-> "True".equals(value)).orElse("No Data"); //"True"
    Optional.of("False").filter((value)-> "True".equals(value)).orElse("No Data"); //"No Data"
    
    //map
    Optional.of("1").map(Integer::valueof).orElseThrow(NoSuchElementException::new)//1

     

    Optinonal 중개 연산

    Optional 객체를 생성 후 사용 가능한 함수. 해당 함수들은 Optional로 리턴하기때문에 반복사용가능합니다.

    //Optional.of
    //value가 null인 경우 NPE 예외를 던짐. 반드시 값이 있어야할 경우 사용
    Optional<String> opt = Optional.of("rst");
    
    //Optional.ofNullable
    //value가 null인 경우 Optional.empty()을 반환.
    Optional<String> opt = Optional.ofNullable(null);//Optional.empty()

     

    Optinonal 최종 연산

    //isPresent()
    //isPresent()는 Optional 객체가 null일 경우 false를, 값이 있을 경우 true를 리턴한다.
    Optional.ofNullable("Test").isPresent();//true
    Optional.ofNullable(null).isPresent();//false
    
    //ifPresent()
    //ifPresent()는 Optional 객체에 값이 존재할 경우 람다식을 실행한다.
    Optional.ofNullable("Test").ifPresent(System.out::println);Test
    
    //get()
    //get()은 Optional객체의 value를 리턴한다. 없을 경우 NoSuchElementException을 발생한다.
    Optional.ofNullable("Test").get()//"Test"
    Optional.ofNullable(null).get()// NoSuchElementException
    
    //orElse()
    //orElse()은 Optional객체에 value가 있을 경우 value을 리턴하고, 없을 경우 orElse함수의 인자 값을 리턴한다.
    Optional.ofNullable(null).orElse("not test") //not test
    
    //orElseGet()
    //orElseGet()은 Optional객체에 value가 있을 경우 value을 리턴하고, 없을 경우 orElse함수의 인자로 입력된 Supplier함수를 적용하여 값을 리턴한다.
    Optional.ofNullable(null).orElseGet(() -> "not test") //not test
    
    //**여기서 주의해야할 점은 orElse는 value의 존재 유무를 따지지 않고 항상 실행은된다.
    // 때문에 객체를 생성하는 코스트가 크거나 null이였을 때 함수가 발생하면 안되는 경우, orElseGet을 쓰는게 맞다.
    
    //orElseThrow()
    //orElseThrow()는 Optional객체에 value가 있을 경우 value을 리턴하고, 없을 경우 orElse함수의 인자로 입력된 Supplier함수를 적용하여 예외를 발생시킨다.
    Optional.ofNullable(null).orElseThrow(NoSuchElementException::new) //NoSuchElementException
    
    //ifPresentOrElse()
    //ifPresentOrElse()는 ifPresent와 비슷하지만 인자를 두개 받아, 두번째 인자가 null일 경우의 리턴을 표현해준다.

    댓글

Designed by Tistory.