Java 오류 & 개발/Java 기본 문법 & 오류
[Java 기본 문법 & 오류] Java Optional 사용법 및 활용 사례
Jinsapp
2025. 3. 14. 14:34
[Java] Optional 사용법 및 활용 사례
1. Optional이란?
Java 8에서 도입된 Optional은 null
값으로 인해 발생하는 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 관련 글도 함께 확인해보세요!