JAVA

[Java] Optional

퉁그리 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일 경우의 리턴을 표현해준다.