Post
Java Optional 실전: null 방어를 넘어서 의도를 표현하는 법
왜 Optional을 실무에서 다시 봐야 할까?
Java에서 NullPointerException은 너무 흔해서 무감각해지기 쉽지만, 실제 문제는 null 자체보다 값이 없을 수 있다는 사실을 코드가 제대로 표현하지 못하는 것입니다.
Optional은 모든 곳에 남발하라고 나온 도구가 아니라, “이 값은 없을 수 있다”는 의도를 드러내기 위한 표현 장치입니다.
기본 사용법
Optional<String> nickname = Optional.ofNullable(user.getNickname());
String displayName = nickname.orElse("게스트");
System.out.println(displayName);
map / filter / orElseGet
String result = Optional.ofNullable(user)
.map(User::getProfile)
.map(Profile::getNickname)
.filter(name -> !name.isBlank())
.orElseGet(() -> "기본닉네임");
언제 쓰면 좋은가?
- Repository 조회 결과
- 외부 API 응답의 선택적 필드
- 변환 체인에서 null-safe 처리
언제 피해야 하나?
- DTO 필드 자체를
Optional로 선언 - 엔티티 필드에 남발
- 단순 getter/setter 전부에 적용
흔한 실수
isPresent()후get()패턴으로 사실상 null 체크와 다를 바 없게 사용orElse()안에 무거운 계산을 넣어 불필요한 연산 발생- Optional을 컬렉션처럼 오해
한 줄 정리
Optional은 null을 없애는 도구가 아니라, 값의 부재 가능성을 코드 수준에서 명확히 표현하는 도구입니다.
댓글