본문 바로가기

JAVA/EXCEPTION

NullPointerException 발생원인과 해결방법

`NullPointerException`은 자바에서 흔히 발생하는 예외로, `null`인 객체에 접근하거나 조작하려고 할 때 발생합니다. 즉, 해당 객체가 메모리상에 존재하지 않는 경우에 발생하는 예외입니다.

**발생 원인:**
`NullPointerException`은 일반적으로 다음과 같은 상황에서 발생합니다:

1. **`null`인 객체에 접근하려고 할 때**: `null`로 설정된 객체의 메서드를 호출하거나 필드에 접근하려고 하면 `NullPointerException`이 발생합니다.

   ```java
   String str = null;
   int length = str.length(); // 이 부분에서 NullPointerException이 발생합니다.
   ```

2. **`null`인 배열 요소를 사용하려고 할 때**: 객체 배열의 요소 중 초기화되지 않거나 `null`로 설정된 요소에 접근하면 `NullPointerException`이 발생합니다.

   ```java
   String[] array = new String[5];
   String element = array[0]; // 이 부분에서 element는 null입니다.
   int length = element.length(); // 이 부분에서 NullPointerException이 발생합니다.
   ```

**해결 방법:**
`NullPointerException`을 피하기 위해서는 객체에 접근하기 전에 반드시 해당 객체가 `null`이 아닌지 확인해야 합니다. 이를 위해 다음과 같은 접근 방법을 사용할 수 있습니다:

1. **접근 전에 `null` 체크**: 객체에 접근하기 전에 반드시 해당 객체가 `null`이 아닌지 확인합니다.

   ```java
   String str = null;

   if (str != null) {
       int length = str.length(); // str이 null이 아닌 경우에만 동작합니다.
   } else {
       System.out.println("str은 null입니다.");
   }
   ```

2. **객체 초기화**: 객체를 사용하기 전에 반드시 초기화를 해야 합니다.

   ```java
   String str = "안녕하세요"; // 객체를 null이 아닌 값으로 초기화합니다.
   int length = str.length(); // str은 null이 아니기 때문에 정상적으로 동작합니다.
   ```

3. **배열 요소의 `null` 체크**: 객체 배열을 다룰 때 해당 요소가 `null`이 아닌지 확인합니다.

   ```java
   String[] array = new String[5];
   array[0] = "안녕하세요"; // 배열 요소를 null이 아닌 값으로 초기화합니다.

   if (array[0] != null) {
       int length = array[0].length(); // array[0]이 null이 아닌 경우에만 동작합니다.
   } else {
       System.out.println("array[0]은 null입니다.");
   }
   ```

조심하고, 객체에 대해 `null` 값을 검증함으로써 자바 프로그램에서 `NullPointerException`을 효과적으로 방지할 수 있습니다.