아래의 코드를 작성하고 실행한다면
NullPointerException
에러를 만날 수 있다.
package ref;
public class Data {
int value;
}
package ref;
public class NullMain2 {
public static void main(String[] args) {
Data data = null;
data.value = 10; // NullPointerException 예외 발생
System.out.println("data = " + data.value);
}
}
Java에서 NullPointerException은 null 값이 할당된 객체를 참조하려 할 때 발생하는 예외이다.
Data data = null;
data 변수에는 참조값이 들어갈 수 있는데, 처음에 null로 초기화를 해주었다.
data.value = 10;
이후에 멤버 변수인 value에 10을 대입하려 한다.
이 때 data 변수가 null인 상태에서 value 멤버에 접근하려고 하기 때문에 NullPointerException이 발생한다. value 멤버에 접근하려면 data 변수에 null값이 아닌 참조값이 대입되어 있어야 한다.
이 문제는 다음의 방안으로 해결할 수 있다.
객체가 null일 경우를 고려하여 if 문을 사용해 객체가 null이 아닐 때만 값을 할당한다.
package ref;
public class NullMain2 {
public static void main(String[] args) {
Data data = null;
if (data != null) {
data.value = 10;
System.out.println("data = " + data.value);
} else {
System.out.println("data 객체는 null입니다.");
}
}
}
이렇게 처리하면 data가 null인 경우 "data 객체는 null입니다." 라는 메세지를 확인할 수 있으며 null이 아닌 경우 멤버 변수에 접근해 값을 할당할 수 있다.
하지만 모든 객체를 이런식으로 검증해가며 사용할 수 없으니 필요한 경우에만 사용하는 것이 좋겠다.
data 객체를 사용하기 전에 먼저 생성해주어 참조값을 대입시킨다.
package ref;
public class NullMain2 {
public static void main(String[] args) {
Data data = new Data(); // 객체 생성
data.value = 10;
System.out.println("data = " + data.value);
}
}
위의 코드처럼 new Data()를 통해 data 객체를 생성하면 참조값이 부여되어 null이 아니기 때문에 value 멤버변수에 접근할 수 있게 된다.
Java에서 NullPointerException 예외는 객체가 null인 상태에서 객체의 멤버 변수에 접근할 때 발생한다. 이를 해결하는 방법은 객체가 null인지 확인한 후 접근하거나, 객체를 생성한 후 사용하는 것이다.
NullPointerException은 매우 흔하게 발생하는 예외이므로 항상 객체가 null일 수 있다는 점을 고려하여 코드를 작성할 필요가 있다.