Java의 Optional 클래스 자세히 알아보기

2024. 7. 7. 21:25·Programming/Java Spring
728x90
반응형

Java의 Optional 클래스에 대해 자세히 설명해드리겠습니다. Optional은 Java 8에서 도입된 클래스이며, NullPointerException을 방지하고 더욱 안전한 코드를 작성하는 데 도움을 줍니다.

 

Java에서 NullPointerException을 방지하고 더욱 안전한 코드를 작성하는 데 유용한 Optional 클래스에 대해 자세히 알아보겠습니다. Optional은 Java 8에서 처음 도입된 이후, 많은 개발자들에게 사랑받고 있는 기능입니다.

1. Optional 클래스란?

Optional 클래스는 Java 8에서 도입된 클래스이며, 값이 존재할 수도 있고 존재하지 않을 수도 있는 컨테이너 객체를 나타냅니다. 이 클래스는 NullPointerException을 방지하는 데 큰 도움이 됩니다.

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        // Optional 객체 생성
        Optional<String> optionalValue = Optional.of("Hello, Optional!");

        // 값이 존재하는지 확인
        if (optionalValue.isPresent()) {
            System.out.println("Optional에 값이 있습니다: " + optionalValue.get());
        } else {
            System.out.println("Optional이 비어 있습니다.");
        }
    }
}

설명:

  • Optional.of(value) 메서드를 사용해 값을 포함한 Optional 객체를 생성합니다.
  • isPresent() 메서드를 사용해 값의 존재 여부를 확인하고, get() 메서드로 값을 가져올 수 있습니다.

2. Optional 객체 생성 방법

Optional 객체를 생성하는 방법에는 여러 가지가 있습니다.

  • Optional.of(T value): 값이 null이 아닌 경우에 사용합니다.
  • Optional.ofNullable(T value): 값이 null일 수도 있는 경우에 사용합니다.
  • Optional.empty(): 빈 Optional 객체를 생성합니다.
public class OptionalExample {
    public static void main(String[] args) {
        // Optional.of() 사용
        Optional<String> optionalValue = Optional.of("Hello, Optional!");

        // Optional.ofNullable() 사용
        Optional<String> nullableValue = Optional.ofNullable(null);

        // Optional.empty() 사용
        Optional<String> emptyValue = Optional.empty();

        // 결과 출력
        System.out.println("Optional Value: " + optionalValue.orElse("비어 있음"));
        System.out.println("Nullable Value: " + nullableValue.orElse("비어 있음"));
        System.out.println("Empty Value: " + emptyValue.orElse("비어 있음"));
    }
}

설명:

  • Optional.of("Hello, Optional!")은 값을 포함한 Optional 객체를 생성합니다.
  • Optional.ofNullable(null)은 null 값을 포함할 수 있는 Optional 객체를 생성합니다.
  • Optional.empty()는 빈 Optional 객체를 생성합니다.

3. Optional 클래스의 주요 메서드

Optional 클래스에는 값을 안전하게 처리할 수 있도록 다양한 메서드가 제공됩니다.

  • isPresent(): 값이 존재하는지 여부를 확인합니다.
  • ifPresent(Consumer<? super T> consumer): 값이 존재할 때 특정 작업을 수행합니다.
  • orElse(T other): 값이 존재하지 않으면 다른 값을 반환합니다.
  • orElseGet(Supplier<? extends T> other): 값이 존재하지 않으면 다른 값을 반환하는 Supplier를 호출합니다.
  • orElseThrow(Supplier<? extends X> exceptionSupplier): 값이 존재하지 않으면 예외를 던집니다.
  • map(Function<? super T,? extends U> mapper): 값이 존재하면 함수를 적용하고 새로운 Optional을 반환합니다.
  • flatMap(Function<? super T,Optional<U>> mapper): 값이 존재하면 함수를 적용하여 Optional을 반환하고 이를 평평하게 합니다.
public class OptionalExample {
    public static void main(String[] args) {
        Optional<String> optionalValue = Optional.of("Hello, Optional!");

        // isPresent() 사용
        if (optionalValue.isPresent()) {
            System.out.println("값이 있습니다: " + optionalValue.get());
        }

        // ifPresent() 사용
        optionalValue.ifPresent(value -> System.out.println("값이 존재합니다: " + value));

        // orElse() 사용
        String result1 = optionalValue.orElse("비어 있음");
        System.out.println("orElse: " + result1);

        // orElseGet() 사용
        String result2 = optionalValue.orElseGet(() -> "비어 있음");
        System.out.println("orElseGet: " + result2);

        // orElseThrow() 사용
        try {
            String result3 = optionalValue.orElseThrow(() -> new RuntimeException("값이 없습니다."));
            System.out.println("orElseThrow: " + result3);
        } catch (RuntimeException e) {
            System.out.println(e.getMessage());
        }

        // map() 사용
        Optional<Integer> mappedValue = optionalValue.map(String::length);
        System.out.println("map: " + mappedValue.orElse(0));

        // flatMap() 사용
        Optional<String> flatMappedValue = optionalValue.flatMap(value -> Optional.of(value.toUpperCase()));
        System.out.println("flatMap: " + flatMappedValue.orElse("비어 있음"));
    }
}

설명:

  • 다양한 Optional 메서드를 사용해 값을 안전하게 처리하는 방법을 보여줍니다.
  • map과 flatMap 메서드를 사용해 값을 변환하거나 다른 Optional 객체를 생성할 수 있습니다.

Java의 Optional 클래스는 NullPointerException을 방지하고 더 안전한 코드를 작성하는 데 큰 도움이 됩니다.

728x90
반응형
저작자표시 (새창열림)

'Programming > Java Spring' 카테고리의 다른 글

강한 결합과 느슨한 결합에 대해  (0) 2024.07.24
Java에서 가변 파라미터 사용법  (1) 2024.07.09
Java에서 거듭제곱 계산하기  (0) 2024.07.05
Java Map의 초기용량을 설정해야 하는 이유  (0) 2023.03.01
비주얼스튜디오 코드에서 Java Compile 하는 방법  (0) 2022.08.11
'Programming/Java Spring' 카테고리의 다른 글
  • 강한 결합과 느슨한 결합에 대해
  • Java에서 가변 파라미터 사용법
  • Java에서 거듭제곱 계산하기
  • Java Map의 초기용량을 설정해야 하는 이유
이프로그
이프로그
리뷰, 개발, 일상을 기록하는 블로그
    반응형
  • 이프로그
    이프로그의 IT이야기
    이프로그
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • Programming (111)
        • C# WPF (11)
        • Java Spring (16)
        • JavaScript & TypeScript (5)
        • Git (9)
        • Database (5)
        • Etc (42)
      • 생활상식 (24)
      • 리뷰 (8)
      • 주식 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      마이크로서비스
      WPF
      데이터베이스 성능
      이슈 트래킹
      서버 관리
      ES6
      분산 메시징 시스템
      rest api
      데이터 파이프라인
      클라우드 네이티브
      소프트웨어 개발
      투자전략
      협업 도구
      Java
      Apache Kafka
      java8
      XAML
      Kubernetes
      dynamicresource
      C# WPF
      주식투자
      웹 개발
      javascript
      재테크
      자바스크립트 트릭
      DevOps
      투자
      docker
      클라우드 컴퓨팅
      데이터 바인딩
    • 최근 댓글

    • 최근 글

    • 250x250
    이프로그
    Java의 Optional 클래스 자세히 알아보기
    상단으로

    티스토리툴바