반응형
1. ❓ NullPointerException이란 무엇인가요?
NullPointerException은 객체 참조가 없는 상태(null)에서 해당 객체의 메서드를 호출하거나 필드에 접근하려 할 때 발생하는 언체크드 예외(Unchecked Exception)입니다.
실행 시점(Runtime)에 발생하기 때문에 컴파일러가 미리 잡아주지 않아 더욱 까다로운 예외입니다.
2. 🔍 주요 발생 원인
- 초기화되지 않은 객체 사용: 객체를 선언만 하고 new 키워드로 생성하지 않은 채 사용할 때
- 메서드 반환값 처리 미흡: 어떤 메서드가 null을 반환할 수 있는데, 이를 체크하지 않고 바로 메서드 체이닝을 할 때
- 컬렉션 내부 요소 접근: 리스트나 맵에 들어있는 요소가 null인 경우
- Auto-unboxing 오류: 래퍼 클래스(Integer, Boolean 등)가 null인 상태에서 기본 타입으로 변환될 때
Java
String str = null;
int length = str.length(); // 여기서 NPE 발생!
3. 🛡️ NPE를 방지하는 실전 방어 기법
✅ 1. 문자열 비교는 상수를 앞에 두기
Java
// 위험한 코드 (input이 null이면 NPE 발생)
if (input.equals("YES")) { ... }
// 안전한 코드 (상수를 앞에 두면 null이라도 false를 반환)
if ("YES".equals(input)) { ... }
✅ 2. Optional 클래스 활용 (Java 8+)
null일 가능성이 있는 객체를 감싸서 명시적으로 처리하도록 유도합니다.
Java
Optional<String> optionalStr = Optional.ofNullable(getName());
String name = optionalStr.orElse("이름 없음"); // null이면 기본값 사용
✅ 3. Objects.requireNonNull() 사용
파라미터가 null이면 안 되는 경우, 메서드 진입점에서 즉시 예외를 발생시켜 원인을 빠르게 찾을 수 있게 합니다.
Java
public void process(String data) {
this.data = Objects.requireNonNull(data, "데이터는 null일 수 없습니다.");
}
✅ 4. 애너테이션 활용 (@NonNull, @Nullable)
IDE나 정적 분석 도구(Lombok 등)가 미리 경고를 줄 수 있도록 힌트를 제공합니다.
💡 시니어의 조언: 'null'을 반환하지 않는 것이 최고의 예외 처리
가장 좋은 예외 처리는 예외가 발생하지 않도록 구조를 짜는 것입니다.
- 리스트나 배열을 반환할 때는 null 대신 **빈 컬렉션(Collections.emptyList())**을 반환하세요.
- Optional은 반환 타입으로만 사용하고, 필드나 파라미터 타입으로 사용하는 것은 지양하세요.
반응형
'개발 > Trouble Shooting' 카테고리의 다른 글
| 0으로 나눌 수 없습니다! ArithmeticException 완벽 가이드 (0) | 2025.12.29 |
|---|---|
| 정해진 선을 넘지 마세요: ArrayIndexOutOfBoundsException 완벽 가이드 (0) | 2025.12.29 |
| 클래스가 어디로 사라졌을까? ClassNotFoundException 완벽 가이드 (0) | 2025.12.29 |
| 데이터베이스와의 소통 불능: SQLException 완벽 가이드 (0) | 2025.12.29 |
| 데이터 통신의 첫 번째 관문: IOException 완벽 이해하기 (0) | 2025.12.29 |