기본 패턴
java
Optional<User> user = findUser(id);
String name = user.map(User::getName)
.orElse("anonymous");설명
Optional은 "값이 없을 수도 있다"는 사실을 타입으로 드러내는 래퍼입니다. 그래서 null을 완전히 대체한다기보다, absence를 더 의식적으로 다루게 만드는 도구에 가깝습니다.- 값을 꺼낼 때는
map,flatMap,orElse,orElseGet,ifPresent같은 메서드 조합을 통해 null 체크 분기를 더 명시적으로 표현할 수 있습니다. - 중요한 점은
Optional이 무조건 좋은 것은 아니라는 것입니다. 필드, 직렬화 모델, 모든 getter에 기계적으로 붙이면 오히려 코드가 무거워질 수 있습니다. - 보통 메서드 반환값에서 "없을 수 있음"을 표현할 때 가장 자연스럽고, 내부 로컬 변수나 도메인 필드에는 꼭 맞지 않을 때도 많습니다.
- 결국
Optional은 null을 숨기는 장치가 아니라, 없을 수 있는 값을 설계 단계에서 더 분명하게 드러내는 선택이라고 보는 편이 좋습니다.
빠른 정리
| 요소 | 의미 |
|---|---|
Optional<T> | 값이 있을 수도 없을 수도 있음 |
map | 값이 있으면 변환 |
orElse | 없을 때 기본값 사용 |
| 잘 맞는 곳 | 메서드 반환값 |
| 남용 주의 | 필드/모든 getter에 기계적으로 사용하지 않기 |
주의할 점
Optional.get()만 쓰기 시작하면 결국 null 체크를 다른 형태로 옮긴 것에 불과해집니다.
Optional은 "안전하게 꺼내는 흐름"까지 함께 써야 의미가 있습니다.
참고 링크
1 sources