📌 [Java] NullPointerException 발생 원인과 해결 방법
📌 NullPointerException이란?
NullPointerException (NPE)은 Java에서 null 값을 참조하려 할 때 발생하는 런타임 오류입니다.
이 오류는 프로그램이 비정상적으로 종료될 수 있으므로 반드시 예외 처리를 해야 합니다.
📌 NullPointerException 발생 원인
1️⃣ 객체가 초기화되지 않은 경우
설명: 객체를 선언했지만 초기화하지 않고 사용하면 NullPointerException
이 발생합니다.
오류 발생 예제:
public class Main {
public static void main(String[] args) {
String text;
System.out.println(text.length()); // NullPointerException 발생
}
}
해결 방법: 변수를 선언할 때 초기화해야 합니다.
public class Main {
public static void main(String[] args) {
String text = "";
System.out.println(text.length()); // 0 출력
}
}
2️⃣ 배열 요소가 초기화되지 않은 경우
설명: 배열을 생성했지만 각 요소를 초기화하지 않으면 NullPointerException이 발생할 수 있습니다.
오류 발생 예제:
public class Main {
public static void main(String[] args) {
String[] names = new String[3];
System.out.println(names[0].length()); // NullPointerException 발생
}
}
해결 방법: 배열의 요소를 명시적으로 초기화합니다.
public class Main {
public static void main(String[] args) {
String[] names = {"Alice", "Bob", "Charlie"};
System.out.println(names[0].length()); // 정상 실행
}
}
3️⃣ 객체의 메서드를 호출할 때 null을 참조하는 경우
설명: null 객체에서 메서드를 호출하면 오류가 발생합니다.
오류 발생 예제:
public class Main {
public static void main(String[] args) {
Person person = null;
System.out.println(person.getName()); // NullPointerException 발생
}
}
해결 방법: 객체가 null인지 확인 후 메서드를 호출합니다.
public class Main {
public static void main(String[] args) {
Person person = new Person("Alice");
if (person != null) {
System.out.println(person.getName()); // 정상 실행
}
}
}
4️⃣ Optional을 활용한 NullPointerException 방지
설명: Java 8부터 Optional
클래스를 사용하면 null 값을 안전하게 처리할 수 있습니다.
예제:
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional optionalText = Optional.ofNullable(null);
System.out.println(optionalText.orElse("Default Value")); // "Default Value" 출력
}
}
📌 NullPointerException 예방법 요약
- ✅ 객체를 사용할 때 항상 초기화
- ✅ null 여부를 확인한 후 메서드 호출
- ✅ 배열의 요소를 명확하게 초기화
- ✅ Java 8 이상에서는 Optional 사용
🔍 결론
NullPointerException은 Java 개발에서 매우 자주 발생하는 오류입니다.
하지만 위 해결 방법을 적용하면 안정적인 코드 작성이 가능합니다! 🚀
📌 더 많은 Java 오류 해결법이 궁금하다면?
'Java 오류 & 개발 > Java 기본 문법 & 오류' 카테고리의 다른 글
[Java] Checked Exception vs Unchecked Exception 차이점 (1) | 2025.03.13 |
---|---|
[Java] String vs StringBuilder vs StringBuffer 차이 (0) | 2025.03.12 |
[Java] Checked Exception vs Unchecked Exception 차이 (0) | 2025.03.12 |
[Java] HashMap vs Hashtable 차이점 및 활용법 (1) | 2025.03.12 |
[Java] IllegalArgumentException 발생 원인과 해결 방법 (1) | 2025.03.11 |