Error Handling

160. [Error Handling] [ Backend ] NullPointerException 완벽 해결 가이드

천재단미 2025. 2. 28. 15:06
728x90
반응형

 

NPE

 

 

목차 ▽열기

 

1. NullPointerException(NPE)란?

NullPointerException(NPE) 은 Java 프로그래밍에서 가장 흔하게 발생하는 런타임 오류 중 하나입니다.

즉, 객체가 null 상태일 때, 해당 객체의 속성이나 메서드에 접근하려고 하면 발생합니다.

 

 

쉽게 말해

"객체가 존재하지 않는데, 객체처럼 사용하려고 할 때 발생하는 오류!"

NullPointerException이 발생하는 원인

원인 설명

객체 초기화 누락 객체를 생성하지 않고 사용하려 할 때
배열 요소 초기화 누락 배열을 선언했지만 요소를 초기화하지 않고 접근할 때
컬렉션 요소 초기화 누락 List 또는 Map 등에 null 값이 포함될 때
메소드 반환값이 null 메소드에서 null을 반환하고, 그 값을 사용하려 할 때
외부 리소스 접근 존재하지 않는 파일이나 네트워크 자원에 접근할 때

2. NullPointerException 예제 코드

NPE가 발생하는 코드

public class Main {
    public static void main(String[] args) {
        String str = null;
        System.out.println(str.length()); // ❌ NullPointerException 발생
    }
}

 

원인

str 객체가 null인데, str.length()를 호출하면서 NPE 발생!


3. NullPointerException 해결 방법

3-1. 객체 초기화하기

String str = "";
System.out.println(str.length()); // 정상 작동 ✅

 

🔹 null 대신 빈 문자열("")을 초기값으로 설정하면 오류를 예방할 수 있습니다.


3-2. null 체크 후 사용하기

if (str != null) {
    System.out.println(str.length());
} else {
    System.out.println("변수가 null 입니다.");
}

 

🔹 null인지 먼저 확인하고, 안전하게 접근합니다.


3-3. Optional을 사용하기 (Java 8 이상)

import java.util.Optional;

Optional<String> optionalStr = Optional.ofNullable(str);
optionalStr.ifPresent(s -> System.out.println(s.length()));

 

🔹 Optional.ofNullable()을 사용하면 null을 자동으로 방어할 수 있습니다.


3-4. 디버거로 추적하여 해결하기

디버거를 활용하면 NullPointerException이 발생하는 정확한 위치를 찾을 수 있습니다.

✔ breakpoint를 설정하여 변수가 null인지 확인하고 원인을 파악하세요.


3-5. 안전한 메소드 호출

if (object != null && object.getProperty() != null) {
    System.out.println(object.getProperty().getSubProperty());
}

 

🔹 객체의 체인된 속성 호출을 안전하게 처리하는 방법입니다.


4. NullPointerException을 예방하는 방법

4-1. 객체 초기화 습관화하기

String str = ""; // `null` 대신 빈 문자열 사용
List<String> list = new ArrayList<>(); // 리스트도 초기화!

 

🔹 객체를 사용하기 전에 반드시 초기화하는 습관을 들이세요.


4-2. 방어적 프로그래밍 적용

public void process(String str) {
    if (str == null) {
        throw new IllegalArgumentException("입력 값이 null이면 안 됩니다.");
    }
    System.out.println(str.length());
}

🔹 메서드의 입력값을 미리 검사하여 null을 방지하세요.


4-3. 유효성 검사 라이브러리 활용

import org.apache.commons.lang3.Validate;

Validate.notNull(str, "입력값이 null이면 안 됩니다.");

 

🔹 Apache Commons Lang의 Validate.notNull()을 사용하면 null 방지가 쉬워집니다.


4-4. 코딩 표준 정하기

개발팀 내에서 null 처리에 대한 규칙을 정하고 준수하세요.

  • 메소드가 null을 반환하지 않도록 하기
  • 가능하면 Optional을 사용하여 null 방어
  • null이 될 수 있는 변수는 반드시 체크 후 사용

5. 예제 시나리오: 컬렉션 사용 시 NullPointerException 방지

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add(null); // `null` 요소 추가 ❌

        for (String item : list) {
            if (item != null) {
                System.out.println(item.length()); // ✅ 안전한 접근
            } else {
                System.out.println("Item is null"); // ❌ NPE 방지
            }
        }
    }
}

 

null 체크를 통해 NullPointerException을 방지하는 방법을 보여줍니다.


6. 결론 

NullPointerException(NPE)은 Java에서 가장 흔한 오류지만,

적절한 예방 조치를 취하면 쉽게 해결할 수 있습니다.

 

NPE 발생을 방지하는 방법 정리

  1. 객체를 반드시 초기화하고 사용하기
  2. null 체크 후 안전하게 접근하기
  3. Optional을 활용하여 null 방어
  4. 방어적 프로그래밍으로 null 값 체크
  5. 디버거를 활용하여 원인 추적하기

Java 개발자라면 NullPointerException을 잘 이해하고, 방어적인 코딩 습관을 가지는 것이 중요합니다.

이를 통해 더욱 견고하고 안정적인 프로그램을 만들 수 있습니다! 

728x90
반응형
home
}