1. Optional 클래스란?
Optional은 Java 8에서 도입된 클래스이며, NullPointerException(NPE) 발생을 방지하기 위해 사용된다.
기본적으로 Optional
은 값이 있을 수도 있고 없을 수도 있는 컨테이너 역할을 한다.
✅ NullPointerException이란?
NullPointerException(NPE)은 Java에서 가장 흔한 런타임 오류 중 하나이다.
null
값을 참조하는 객체의 메서드를 호출할 경우 발생한다.
String name = null;
int length = name.length(); // NullPointerException 발생
위와 같은 코드에서 name
이 null이므로 length()
를 호출할 수 없어 NPE가 발생한다.
2. Optional 클래스 생성 및 활용
✅ Optional 객체 생성 방법
Optional.of(value)
→ null이 아닌 값으로 Optional 생성Optional.ofNullable(value)
→ null을 허용하는 Optional 생성Optional.empty()
→ 비어 있는 Optional 생성
Optional opt1 = Optional.of("Hello"); // 값이 있는 Optional
Optional opt2 = Optional.ofNullable(null); // 값이 없을 수도 있는 Optional
Optional opt3 = Optional.empty(); // 비어 있는 Optional
3. Optional 값 확인 및 처리
✅ 값이 있는 경우 처리
Optional opt = Optional.of("Hello");
if (opt.isPresent()) { // 값이 존재하는지 확인
System.out.println(opt.get()); // "Hello"
}
✅ 값이 없는 경우 기본값 제공
String result = opt.orElse("Default Value");
System.out.println(result); // "Hello" (값이 있을 경우) or "Default Value" (값이 없을 경우)
✅ 값이 없을 경우 동작 수행
String result = opt.orElseGet(() -> "Generated Default");
System.out.println(result);
✅ 값이 없을 경우 예외 발생
String result = opt.orElseThrow(() -> new IllegalArgumentException("No value present"));
4. Optional을 활용한 안전한 코드 작성
✅ 예제: 사용자 객체에서 이메일 가져오기
기본적으로 getEmail()
이 null
을 반환할 수 있다고 가정하자.
class User {
private String email;
public String getEmail() {
return email;
}
}
기존 방식:
User user = new User();
String email = user.getEmail();
if (email != null) {
System.out.println(email.toLowerCase());
} else {
System.out.println("Email not provided");
}
Optional을 활용한 방식:
Optional user = Optional.ofNullable(null);
String email = user.map(User::getEmail)
.map(String::toLowerCase)
.orElse("Email not provided");
System.out.println(email);
5. Optional과 Stream 활용
Optional은 Stream API와 함께 사용될 때 강력한 기능을 제공한다.
✅ 리스트에서 특정 조건을 만족하는 값 찾기
List names = Arrays.asList("Alice", "Bob", "Charlie");
Optional result = names.stream()
.filter(name -> name.startsWith("B"))
.findFirst();
System.out.println(result.orElse("No match found"));
6. 마무리
Optional을 활용하면 NullPointerException을 방지하고 가독성 높은 코드를 작성할 수 있다.
특히 orElse()
, map()
, ifPresent()
등을 적절히 활용하면 불필요한 null 체크를 줄이고 보다
안전한 코드 작성을 할 수 있다.
더 많은 Java 예외 처리 기법이 궁금하다면?
'Java 오류 & 개발 > Java 기본 문법 & 오류' 카테고리의 다른 글
[Java 기본 문법 & 오류] Java Optional 사용법 및 활용 사례 (1) | 2025.03.14 |
---|---|
[Java] String, StringBuilder, StringBuffer 차이점과 성능 비교 (1) | 2025.03.13 |
[Java 기본 문법 & 오류] CheckedException vs UncheckedException 차이점 및 활용법 (1) | 2025.03.13 |
[Java] Checked Exception vs Unchecked Exception 차이점 (1) | 2025.03.13 |
[Java] String vs StringBuilder vs StringBuffer 차이 (0) | 2025.03.12 |