[Java] Optional

쓰옹·2022년 12월 1일
0

📙 Java 잡아🤏

목록 보기
21/25
post-thumbnail

Optional

  • “존재할 수도 있지만 안 할 수도 있는 객체”, 즉, “null이 될 수도 있는 객체”을 감싸고 있음

  • <T>타입 객체의 Wrapper class

  • 모든 종류의 객체 저장 가능

  • 간접적으로 null을 다루기

    • null 관련 문제
      1. 런타임에 Null Pointer Exception 예외 발생

      2. if 문 사용하여 체크 → 코드 가독성과 유지 보수성 떨어짐

        if (result != null) {}

  • NPE(Null Pointer Exception) 예외를 Optional이 제공하는 메소드로 간단하게 회피할 수 있다.

  • nullOptional 객체에 넣어 주소값을 갖게 됨

    • 항상 null이 아니게 된다

    • NPE 발생 가능성이 없어짐

    • if문으로 null 체크 안해도 되니 코드가 간결해짐

      • String str = ""; 빈문자열로 초기화 하는 등…

Optional<T> 객체 생성하기

String str = "abc";
Optional<String> optVal = Optional.of(str);  
// 위 두개를 합치면
Optional<String> optVal = Optional.of("abc");  //null이 아닌 객체를 담음

Optional<String> optVal = Optional.of(null);  // NPE 발생
Optional<String> optVal = Optional.ofNullable(null);  // null인지 아닌지 확신X 객체 담음
  • null대신 빈 Optional 객체를 사용하자
    Optional<String> optVal = null; // null로 초기화. 바람직하지 않음
    Optional<String> optVal = Optional.<String>empty(); // 빈 객체로 초기화. null을 담음
                                   //  --------은 생략 가능

Optional 객체 값 가져오기

  • Optional 클래스는 객체 값 주는 다양한 인스턴스 메서드를 제공

    • 객체가 존재할 경우 해당 값 반환
    • 비어있는 경우(null을 담고 있는 경우) 다르게 작동
  • 비어있는 Optional 객체에 대해 (null일 경우)

    • get() : NoSuchElementException 예외 발생. 그래서 잘 안씀
    • orElse(T other)

      : 넘어온 인자 반환.

      • orElse("") 인 경우 “ ” 반환
    • orElseGet(Supplier < ? extends T> other)

      : 넘어온 함수형 인자를 통해 생성된 객체 반환

      • orElseGet(String :: new) 람다식 사용으로 new String() 반환
    • orElseThrow(Supplier < ? extends X> exceptionSupplier)

      : 넘어온 함수형 인자를 통해 생성된 예외를 던짐

      • orElseThrow(NullPointerException::new) 널이면 예외 발생
  • null 체크

    • isPresent()

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

    • ifPresent(Consumer)

      null이 아닐 때만 작업 수행. null이면 안함




reference

자바8 Optional 1부: 빠져나올 수 없는 null 처리의 늪
[자바의 정석 - 기초편] ch14-35~39 Optional에 대한 강의입니다.

profile
기록하자기록해!

0개의 댓글