728x90
NullPointerException이란?
null 상태인 객체에 접근하려고 할 때 발생하는 오류
즉, "아직 생성되지 않은 객체"를 사용하려고 할 때 발생해요.
대표적인 예시
예제 1: 문자열이 null일 때
String name = null;
System.out.println(name.length()); // NullPointerException 발생
예제 2: 배열 요소가 null일 때
String[] list = new String[3];
list[0] = null;
System.out.println(list[0].toUpperCase()); // X
예제 3: 객체를 생성하지 않았을 때
Student s = null;
s.printInfo(); // NPE 발생
NullPointerException 발생 원인
원인 | 설명 |
객체를 new로 생성하지 않고 사용 | Student s = null; s.method() |
메서드에서 null을 리턴 받음 | getUser()에서 null 반환 |
배열/리스트에 null 값이 있음 | list.get(0)이 null |
Map에서 존재하지 않는 키 조회 | map.get("없는 키") → null 반환 후 .toString() |
NPE 해결 방법
1. 객체를 확실히 초기화
Student s = new Student(); // null로 쓰지 말고 생성자 사용
2. null 체크 조건문 추가
if (name != null) {
System.out.println(name.length());
} else {
System.out.println("이름이 없습니다.");
}
3. Optional 사용 (Java 8 이상)
Optional<String> opt = Optional.ofNullable(name);
System.out.println(opt.orElse("이름 없음"));
4. 메서드가 null을 리턴하지 않도록 설계
// null 리턴 대신 빈 객체나 기본값을 리턴
public String getMessage() {
return message != null ? message : "기본 메시지";
}
실전 디버깅 팁
- NPE가 발생하면 에러 로그에 라인 번호가 출력됩니다.
- 해당 줄에서 null일 가능성이 있는 변수를 확인하세요.
- IDE(이클립스, IntelliJ)는 NPE 가능성을 미리 경고해 주기도 해요.
마무리 요약
항목 | 내용 |
예외 이름 | NullPointerException |
발생 시점 | 실행 중 (런타임 오류) |
원인 | null 상태의 객체를 사용하려 할 때 |
해결 방법 | 객체 초기화, null 체크, Optional 사용 등 |
실습 아이디어
- null 상태일 때 다른 문장 출력하기
- Scanner 입력이 null인지 체크
- 배열 안의 null 방지 실습
LIST
'JAVA > 자주 나오는 에러 & 디버깅' 카테고리의 다른 글
변수 추적과 실행 흐름 확인 (0) | 2025.04.13 |
---|---|
IntelliJ에서 브레이크포인트 걸기 (0) | 2025.04.13 |