Optional과 EMPTY 객체 개념은 자바에서 null 안전성과 객체 관리와 관련이 있다. 둘 다 기능이 비슷하나 자세히 보면 큰 차이가 있는데 요약하자면
Optional은 코드의 간결성에 강점이 있고
EMPTY 객체는 메모리 효율성에 강점이 있다.
Optional<T>는 값이 있을 수도 있고 없을 수도 있는 컨테이너 객체.
null 대신 안전하게 값의 유무를 표현하여 NullPointerException(NPE)을 방지.
Optional.of(value) : null이 아닌 값을 가진 Optional 생성.
Optional.ofNullable(value) : null이면 Optional.empty()를 반환.
Optional.empty() : 값이 없는 Optional 객체를 반환.
Optional<String> opt = Optional.of("Hello");
Optional<String> emptyOpt = Optional.empty(); // 값이 없음
null 대신 사용할 미리 정의된 "빈 객체"를 만들어 사용하는 패턴.
null 체크를 피하고 의미 있는 기본 동작을 제공.
Optional은 컨테이너지만, EMPTY 객체는 실제 객체다.
객체가 null일 때 발생할 수 있는 예외를 방지.
public class User {
public static final User EMPTY = new User("", ""); // 빈 객체 상수
private String name;
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
}
// 사용 예시
User user = findUser().orElse(User.EMPTY);
이 경우 null 대신 User.EMPTY를 반환하므로, null 체크 없이도 안전하게 사용 가능.
Optional
String name = userOpt.map(User::getName).orElse("Unknown");
EMPTY 객체
if (user == User.EMPTY) { ... }
Optional
EMPTY 객체
하나의 상수를 재사용하므로 메모리 효율이 높습니다.
public static final User EMPTY = new User("", "");
Optional
orElse(), ifPresent() 등 안전한 메서드를 제공해 NPE를 예방할 수 있습니다.EMPTY 객체
user.getName() 호출 시 null이 아닌 빈 문자열을 반환하도록 설계해야 안전.| 특징 | Optional | EMPTY 객체 |
|---|---|---|
| 명시적 표현 | 값이 없음을 Optional.empty()로 표현 | EMPTY 상수로 표현 |
| 코드 간결성 | 메서드 체인을 활용한 간결한 처리 | isEmpty()로 직접 확인 |
| 메모리 사용 | Optional 객체 추가 생성 필요 | 하나의 상수로 재사용 가능 |
| NPE 방지 | 안전한 Optional 메서드 제공 | 개발자가 직접 체크해야 함 |
Optional은 코드의 간결성에 강점이 있고
EMPTY 객체는 메모리 효율성에 강점이 있다.