본문 바로가기
JAVA/자주 나오는 에러 & 디버깅

NullPointerException 원인과 해결

by DEVLIB 2025. 4. 13.
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