개발천재

[JAVA] Optional 개념과 주요 메서드 본문

개발 준비/JAVA

[JAVA] Optional 개념과 주요 메서드

세리블리 2025. 2. 12. 21:22
반응형

Optional은 Java에서 값이 있을 수도, 없을 수도 있는 경우를 처리하는 컨테이너이다. 예를 들어, 데이터를 찾을 때 값이 없을 수도 있는데(null), 그럴 때 Optional을 사용하면 null을 직접 다루는 대신, 값이 있는지 없는지를 명시적으로 확인할 수 있다. 이렇게 Optional을 사용하면 null로 인한 오류를 줄이고, 값이 없을 때도 안전하게 처리할 수 있어서 코드가 더 깔끔하고 오류를 예방할 수 있다.

 


 

 

Optional 기본 개념

Optional 객체는 값이 존재할 수도 있고, 존재하지 않을 수도 있다.
Optional을 사용하면 null 값을 직접 체크하는 대신, Optional이 비어 있는지 (값이 없는 상태인지) 여부를 명확하게 다룰 수 있다.

 

Optional을 사용 이유

NullPointerException 방지

null 값을 직접 사용하면서 발생할 수 있는 예외를 방지할 수 있다.


명시적 처리

값이 없을 때 null을 사용하는 것보다 Optional.empty()나 Optional.ofNullable()을 사용해 보다 명시적으로 값을 다룰 수 있다.

 

 


 

 

 

Optional의 주요 메서드

  • Optional.of(value)
  • Optional.ofNullable(value)
  • Optional.empty()
  • isPresent()
  • ifPresent(Consumer<T> action)
  • get()
  • orElse(T other)
  • orElseGet(Supplier<? extends T> other)
  • orElseThrow(Supplier<? extends X> exceptionSupplier)

 

Optional.of(value)

값이 존재하는 경우, Optional 객체를 생성하고, 값이 null이면 NullPointerException을 던진다.

Optional<String> name = Optional.of("장원영");

 

 

Optional.ofNullable(value)

값이 null일 수도 있는 경우에 사용할수도 있다. 값이 null이라면 Optional.empty()를 반환한다.

Optional<String> name = Optional.ofNullable(null);  // Optional.empty() 반환

 

 

Optional.empty()

값이 없을 때 사용하는 빈 Optional 객체를 반환한다.

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

 

 

isPresent()

Optional 객체가 값을 가지고 있으면 true, 값이 없으면 false를 반환한다.

Optional<String> name = Optional.ofNullable("장원영");
boolean hasValue = name.isPresent();  // true

 

 

ifPresent(Consumer<T> action)

Optional이 값을 가지고 있다면, 그 값을 사용해서 특정 작업을 실행한다. 값이 없으면 아무 작업도 하지 않는다.

Optional<String> name = Optional.ofNullable("장원영");
name.ifPresent(n -> System.out.println(n));  // "장원영" 출력

 

 

get()

Optional이 값을 가지고 있으면 그 값을 반환, 값이 없으면 NoSuchElementException을 던진다.
get()을 사용할 때는 isPresent()로 먼저 체크하는 것이 좋다.

Optional<String> name = Optional.ofNullable("장원영");
String result = name.get();  // "장원영"

 

 

orElse(T other)

Optional이 값을 가지고 있으면 그 값을 반환하고, 값이 없으면 other 값을 반환한다.

Optional<String> name = Optional.ofNullable(null);
String result = name.orElse("기본값");
System.out.println(result);  // "기본값"

 

 

orElseGet(Supplier<? extends T> other)

Optional이 값을 가지고 있으면 그 값을 반환하고, 값이 없으면 Supplier에서 제공하는 값을 반환한다. orElse()와 유사하지만, Supplier를 사용하여 값을 동적으로 생성할 수 있다.

Optional<String> name = Optional.ofNullable(null);
String result = name.orElseGet(() -> "동적기본값");
System.out.println(result);  // "동적기본값"

 

 

orElseThrow(Supplier<? extends X> exceptionSupplier)

Optional이 값이 없을 때, Supplier가 제공하는 예외를 던진다.

Optional<String> name = Optional.ofNullable(null);
String result = name.orElseThrow(() -> new IllegalArgumentException("값이 없습니다"));
// IllegalArgumentException: 값이 없습니다

 

 


 

 

Optional 사용 예시

public class OptionalExample {
    public static void main(String[] args) {
        // Optional 생성
        Optional<String> name = Optional.ofNullable("장원영");

        // 값이 있으면 출력
        name.ifPresent(n -> System.out.println("이름: " + n));

        // 값이 없으면 기본값 반환
        String result = name.orElse("기본값");
        System.out.println(result);  // "장원영" 출력

        // 값이 없으면 예외 던짐
        Optional<String> emptyName = Optional.ofNullable(null);
        try {
            String value = emptyName.orElseThrow(() -> new IllegalStateException("값이 없습니다"));
        } catch (IllegalStateException e) {
            System.out.println(e.getMessage());  // "값이 없습니다" 출력
        }
    }
}

 

 

 


 

 

Optional은 언제 사용해야 할까?

Optional은 값이 없을 수도 있는 경우에 유용하게 사용된다. Optional을 사용하면 값이 있을 때와 없을 때의 처리를 명확하게 구분할 수 있어, 코드의 가독성이나 유지보수성이 향상된다.

데이터베이스에서 값을 조회할 때 값이 없을 수도 있으면 Optional을 사용하여 안전하게 처리할 수 있다. null 값을 다루는 것보다 Optional을 사용하여 코드의 명확성을 높일 수 있다. Optional은 null 값을 더 안전하고 명시적으로 다룰 수 있는 방법이다. 하지만, 값이 항상 존재하는 경우에는 Optional을 굳이 사용할 필요가 없다. 그 대신 직접 값을 다루면 된다.


반응형