반응형
Java에서 문자열 검색할 때 contains()는 자주 쓰이는 메서드다. 하지만 실무에선 예상 못한 NullPointerException이 발생할 수 있어서 주의가 필요하다.
💥 문제 상황: null을 contains에 넣으면?
java
복사편집
String id = null; boolean result = "abc".contains(id); // 💥 여기서 NPE 발생
- String.contains(CharSequence s)는 내부에서 indexOf(s)를 호출하는데,
이때 s가 null이면 바로 NullPointerException이 발생한다. - 즉, null 체크 없이 contains 사용하면 예외 터짐
✅ 해결 방법 1: null 체크 후 contains
java
복사편집
if (id != null && "abc".contains(id)) { // 안전하게 실행됨 }
이건 기본적인 방식이지만, 매번 null 체크를 해야 한다는 불편함이 있다.
✅ 해결 방법 2: StringUtils.contains()
Apache Commons Lang의 StringUtils.contains()를 사용하면 더 안전하다.
java
복사편집
import org.apache.commons.lang3.StringUtils; String id = null; boolean result = StringUtils.contains("abc", id); // false 반환, NPE 발생 안함
메서드null 허용 여부결과
| "abc".contains(null) | ❌ | NPE 발생 |
| StringUtils.contains(...) | ✅ | false 반환 |
📌 언제 StringUtils를 써야 할까?
- 입력값이 외부에서 들어오는 경우 (request.getParameter(...), DB 값 등)
- 유효성 검증이 확실하지 않은 경우
- 매번 null 체크가 번거로울 때
→ StringUtils.contains()를 쓰는 게 더 안정적이고 유지보수에도 유리하다
💡 한 줄 요약
String.contains()는 null 들어오면 예외 발생.
StringUtils.contains()는 null-safe 하게 false 반환.
반응형
'IT' 카테고리의 다른 글
| RestTemplate 응답 타입에 따른 20초 타임아웃 트러블슈팅 (0) | 2025.12.04 |
|---|---|
| 스프링 의존성 주입: @Autowired vs @RequiredArgsConstructor + 단위 테스트 예제 (0) | 2025.09.24 |
| [Vue3] composables 역할 (0) | 2025.07.03 |
| [ASP.NET] IsPostBack 의미/사용하기 (1) | 2020.04.21 |
| [ASP.NET] Repeater Control로 데이터 바인딩 하기 (0) | 2020.04.21 |
댓글