반응형
NullPointerException
NullPointerException은 참조 타입(reference type) 변수를 잘못 사용했을 때 발생한다.
기본 타입(primitive type) 변수는 애초에 null로 초기화가 불가능하므로 기본 타입 변수와 관련해서는 NullPointerException이 일어나지 않는다.
참조 타입 변수가 null 값을 가지는 건 힙 영역의 객체를 참조하지 않는다는 뜻이다. 따라서 참조 타입 변수에 저장된 주소 값이 없는 것일 뿐, 참조 타입 변수는 스택 영역에 생성되긴 한다.
참조 타입 변수를 사용한다는 건 객체를 사용한다는 것을 의미하는데, null 값을 참조 타입 변수에 저장한다는 의미는 참조할 객체가 없다는 의미이다. 따라서 null 값을 가진 참조 타입 변수는 사용할 수 없다.
배열 타입과 클래스 타입을 예시로 든다. 배열 타입과 클래스 타입은 모두 참조 타입이다.
// 배열 타입
int[] intArr = null;
intArr[0] = 10; // NullPointerException
// 클래스 타입
String str = null;
System.out.println(str.length()); // NullPointerException
배열 타입인 intArr을 null로 초기화하고 intArr[0]에 접근하면 NullPointerException이 발생한다.
intArr 변수가 참조하는 배열 객체가 없기 때문이다.
String은 클래스 타입이므로 str 변수도 null로 초기화가 가능하다. str 변수가 참조하는 String 객체가 없으므로 str 변수의 length() 메서드를 호출하면 NullPointerException이 발생한다.
반응형