-
[Java] OptionalJAVA 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일 경우의 리턴을 표현해준다.
'JAVA' 카테고리의 다른 글
[Java] Java 함수적 인터페이스 Consumer, Supplier (0) 2021.12.17 [Java]Optional 활용법 (0) 2021.12.17 [Java] java8 stream (0) 2021.12.17 [Java] 메소드 참조(method reference) (0) 2021.12.16 [JAVA] 람다식 (lamda Expression)와 함수형 인터페이스(Functional Interface) (0) 2021.10.04