Java Optional에 대한 설명과 예제

2023. 7. 13. 13:57카테고리 없음

반응형

Optional 특징

  1. 값이 존재하지 않을 때를 대비한 안전한 처리: Optional은 값이 없을 때에 대한 처리를 안전하게 할 수 있습니다. 값이 존재하지 않을 때에는 null 대신 Optional.empty()로 표현됩니다.
  2. Null 체크를 간소화: Optional을 사용하면 명시적인 null 체크를 줄일 수 있습니다. 값이 있는 경우에 대한 로직에 집중할 수 있습니다.
  3. Method Chaining을 통한 유연한 연산: Optional은 메서드 체이닝을 통해 여러 연산을 수행할 수 있습니다. 값이 있는 경우에만 연산이 수행되므로, NullPointerException을 방지하면서 유연한 코드를 작성할 수 있습니다.

 

 

Optional 예제

1. Optional 생성

Optional<String> optionalValue = Optional.of("Hello");
Optional<String> emptyOptional = Optional.empty();
Optional<String> nullableOptional = Optional.ofNullable(null);

 

 

2. 값의 존재 여부 확인

Optional<String> optionalValue = Optional.of("Hello");

// 값이 있는지 확인
boolean isPresent = optionalValue.isPresent();
System.out.println("Is present: " + isPresent);

// 값이 있는 경우에만 동작
optionalValue.ifPresent(value -> System.out.println("Value: " + value));

 

3. 값 가져오기

Optional<String> optionalValue = Optional.of("Hello");

// 값 가져오기
String value = optionalValue.get();
System.out.println("Value: " + value);

 

 

4. 값이 없을 때 기본값 사용

Optional<String> emptyOptional = Optional.empty();

// 값이 없을 때 기본값 사용
String value = emptyOptional.orElse("Default Value");
System.out.println("Value: " + value);

// 값이 없을 때 기본값 생성 함수 사용
String anotherValue = emptyOptional.orElseGet(() -> "Default Value");
System.out.println("Another Value: " + anotherValue);

 

 

5. 값이 없을 때 예외 던지기

Optional<String> emptyOptional = Optional.empty();

// 값이 없을 때 예외 던지기
String value = emptyOptional.orElseThrow(() -> 
    new RuntimeException("Value is not present"));
System.out.println("Value: " + value);

 

 

6. 값 변환하기

Optional<String> optionalValue = Optional.of("Hello");

// 값 변환
Optional<Integer> lengthOptional = optionalValue.map(String::length); 
lengthOptional.ifPresent(length ->
    System.out.println("Length: " + length));

 

 

7. 중첩 Optional 처리

Optional<String> optionalValue = Optional.of("Hello");
Optional<Optional<String>> nestedOptional = Optional.of(optionalValue);

// 중첩 Optional 풀어내기
Optional<String> flattenedOptional = nestedOptional.flatMap(Optional::stream);
flattenedOptional.ifPresent(value -> System.out.println("Value: " + value));

 

반응형