Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 코딩테스트
- QueryDSL
- 레벨1
- 글또
- SpringBoot
- 포트앤어댑터 아키텍처
- 클라우드아키텍처
- 가용영역
- Level2
- 다짐글
- 회고
- builder-pattern
- 클린 아키텍처
- constructor
- design-pattern
- 프로그래머스
- UserLand
- OpenSearch
- 글쓰기세미나
- object-creation
- ReverseNested
- DevOps
- 헥사고날 아키텍처
- 3계층 아키텍처
- 코엑스그랜드볼룸
- HashMap
- static-factory-method
- React
- axios
- 글또10기
Archives
- Today
- Total
oguri's garage
`null` 대신 `Optional.empty`를 return 해야 하는 이유 본문
Java에서 "값이 없음"을 null로 반환하는 대신 Optional.empty()를 사용하면, 코드의 안정성과 가독성을 크게 향상할 수 있다.
Optional<T>은 "결과값이 없을 수도 있다"는 것을 명시적으로 표현하는 컨테이너이다.
null과 Optional의 핵심 차이
| 구분 | null 반환 |
Optional<T> 반환 |
|---|---|---|
| 안전성 | 호출자가 null 체크를 누락하면 NullPointerException 발생. |
Optional 객체 자체가 null이 아니므로 NPE 발생 위험이 없음. |
| 가독성/의도 | 메서드 시그니처만으로 "값 없음" 가능성을 알기 어려움. | Optional<T> 반환 타입만으로 "값이 없을 수 있다"는 사실을 명시적으로 전달. |
| 처리 방식 | if (obj != null) 같은 명령형 코드가 반복됨. |
ifPresent(), orElse() 등 안전하고 선언적인 API를 사용하도록 유도. |
상황별 "값 없음" 처리 방법
- 단일 값을 반환하지만 결과가 없을 때 →
Optional<T>- 상황: ID로 특정 엔티티를 조회하는 경우 (
findUserById(id)) - 설명: 조회 결과가 단 하나이거나 없을 수 있는 상황입니다. 이럴 때
Optional을 사용해 반환하는 것이 가장 적합하다. 결과가 없으면Optional.empty()를 반환하여 호출자가 후속 처리를 안전하게 하도록 만든다.
- 상황: ID로 특정 엔티티를 조회하는 경우 (
- 여러 값을 담은 컬렉션을 반환할 때 → 빈 컬렉션(Empty Collection)
- 상황: 특정 조건을 만족하는 모든 엔티티를 조회하는 경우 (
findProductsInStock()) - 설명: 이때는
Optional<List<T>>가 아니라 빈 리스트(Collections.emptyList())를 반환하는 것이 좋다. 호출자는 결과가 있든 없든null체크 없이for-each루프를 바로 사용할 수 있어 코드가 간결해진다.
- 상황: 특정 조건을 만족하는 모든 엔티티를 조회하는 경우 (
'개발하다 > Java' 카테고리의 다른 글
| Java 문자열 조합, String.format()이 가독성에 좋은 이유 (0) | 2025.10.19 |
|---|---|
| (Java) Stream API에서 Checked Exception 처리하기 (0) | 2025.10.07 |
| (Java) Record - Lombok Builder vs Record 비교 (0) | 2025.10.05 |
| Java 객체 생성 패턴 비교 및 선택 가이드 (0) | 2025.09.28 |
| HashMap 사용 방법 (5) | 2024.05.28 |