Java 오류 & 개발/Java 기본 문법 & 오류

[Java 기본 문법 & 오류] Java Optional 사용법 및 활용 사례

Jinsapp 2025. 3. 14. 14:34

[Java] Optional 사용법 및 활용 사례

1. Optional이란?

Java 8에서 도입된 Optionalnull 값으로 인해 발생하는 NullPointerException을 방지하기 위해 사용되는 래퍼 클래스입니다. 기존에는 변수가 null인지 직접 체크해야 했지만, Optional을 사용하면 더 안전하게 코드 작성을 할 수 있습니다.

2. Optional 생성 방법

Optional 객체는 여러 가지 방법으로 생성할 수 있습니다.

  • Optional.of(value) - null이 아닌 값을 Optional로 감쌉니다. (null일 경우 예외 발생)
  • Optional.ofNullable(value) - 값이 null일 수도 있는 경우 사용합니다.
  • Optional.empty() - 빈 Optional 객체를 생성합니다.

// Optional 생성 예제
Optional optional1 = Optional.of("Hello"); // 값이 null이 아니어야 함
Optional optional2 = Optional.ofNullable(null); // null 허용
Optional optional3 = Optional.empty(); // 비어 있는 Optional

3. Optional 주요 메서드

메서드 설명 예제 코드
isPresent() 값이 존재하는지 확인 optional.isPresent()
orElse() 값이 존재하면 반환, 없으면 기본값 설정 optional.orElse("기본값")
orElseGet() 값이 존재하지 않으면 람다식 실행 optional.orElseGet(() -> "기본값")
orElseThrow() 값이 없으면 예외 발생 optional.orElseThrow(IllegalArgumentException::new)
map() 값이 존재하면 변환, 없으면 빈 Optional 반환 optional.map(String::toUpperCase)

4. Optional 사용 예제

예를 들어, 사용자 정보를 가져오는 메서드에서 Optional을 사용할 수 있습니다.


public class UserService {
    public Optional getUserEmail(String userId) {
        if ("user123".equals(userId)) {
            return Optional.of("user@example.com");
        } else {
            return Optional.empty();
        }
    }
    
    public static void main(String[] args) {
        UserService userService = new UserService();
        String email = userService.getUserEmail("user123").orElse("이메일 없음");
        System.out.println(email); // user@example.com
        
        String email2 = userService.getUserEmail("unknown").orElse("이메일 없음");
        System.out.println(email2); // 이메일 없음
    }
}

5. Optional을 활용한 NullPointerException 방지

아래와 같이 if-else를 활용한 null 체크보다 Optional을 사용하면 더 깔끔한 코드가 됩니다.


// 기존 방식 (null 체크 필요)
public String getUpperCaseName(String name) {
    if (name != null) {
        return name.toUpperCase();
    } else {
        return "Unknown";
    }
}

// Optional 방식
public String getUpperCaseName(String name) {
    return Optional.ofNullable(name).map(String::toUpperCase).orElse("Unknown");
}

6. Optional 사용 시 주의점

  • Optional은 객체 필드로 직접 사용하지 않는 것이 좋습니다. (Jackson 등 직렬화 관련 문제 발생 가능)
  • 무조건 Optional을 사용하는 것이 아니라, null을 확실히 피해야 하는 경우에만 사용해야 합니다.

7. 마무리

Java 8의 Optional은 NullPointerException을 예방하고 가독성을 높이는 데 유용한 기능입니다.

적절한 메서드를 활용하면 불필요한 null 체크를 줄이고, 더 안전한 코드를 작성할 수 있습니다.


🔗 다른 Java 관련 글도 함께 확인해보세요!

Java 스트림(Stream) 사용법