[JAVA] Null & NullPointException

Jaemin Lee·2023년 12월 1일

JAVA

목록 보기
4/7

이 글은 Inflearn 강의 중 김영한님의 김영한의 실전 자바 - 기본편을 감상하며 작성하였습니다.


Null

 Null 은 참조형 변수에 참조값이 없다는 뜻이다. 변수와 초기화 에서 지역변수는 개발자가 직접 초기화 하지않으면 에러가 발생한다는 것을 배웠다. 참조형 변수에 주소값을 대입하지 않고 초기화 하려면 null 을 넣어주면 된다.

1. Data data = null;	// null 대입
2. data = new Data();	// 인스턴스 생성
3. data = null;

위 코드의 메모리 상태는 아래와 같다

GC(Garbage Collection) 는 JVM 에서 메모리 관리를 효율적으로 하기위해 만들어 놓은 것이다. 참조변수에 할당되어있던 참조값이 사라져 인스턴스의 주소값을 저장하는 참조변수가 없을 때 GC 가 해당 인스턴스를 메모리상에서 제거한다.



NullPointException

NullPointException 은 null 값을 가지고있는 참조변수를 활용하여 참조하려고 하였을 때 발생한다.
즉, null값인 참조변수에 .(dot) 을 사용하면 발생하는 것이다.

지역변수에서의 NullPointException

public static void main(String[] args) {
	Data data = null;
	data.value = 10;
}

위 코드에서는 참조변수 data. 을 사용하여 인스턴스화 되지않은 Data 클래스의 멤버변수 value 에 접근하여 10 이라는 값을 대입하려고 하고있다.

Data 인스턴스가 생성되지도 않았을 뿐더러 참조값이 null 이니 어떤 메모리주소로 찾아가야하는지도 모른다.

위 코드를 실행하면 아래 에러가 발생한다. 발생한 에러를 보면 NullPointerException 이라는 단어를 확인할 수 있다.

위 코드는 아래처럼 변경하면 해결 가능하다.

Data data = new Data();
data.value = 10;

위 코드를 메모리관점에서 도식화 해보자.

참조변수 data 안에 x100 이라는 주소가 대입되었고 주소값이 x100 인 Data 인스턴스에 접근하여 멤버변수 value 에 10 을 대입할 수 있게 되었다.
지역변수에서의 NullPointException 은 에러위치를 찾기 쉽고 간편하게 수정할 수 있다.
하지만 참조변수가 멤버변수로 선언되었을 때 까다로워 진다.

멤버변수에서의 NullPointException

public Class BigData {
	Data data;	//멤버변수로 선언된 참조변수 data
   	int number;
}
public static void main(String[] args){
	BigData bigData = new bigData; // BigData 인스턴스
    bigData.count = 90;
    bigData.data.value = 10;
}

위 코드의 bigData.data.value 에서 NullPointException 이 발생한다.

메모리관점에서 도식화 해보자.

멤버변수에서 참조변수는 자동으로 null 로 초기화 되고 기본형 int 변수는 0 으로 초기화 된다.
bigData.data.value 는 값이 null 인 참조변서 data 에 . 을 사용하였으므로 NullPointException 이 발생한다.
data 변수에 Data 클래스의 인스턴스의 메모리주소를 대입해주면 해결된다.

	public static void main(String[] args) {
        BigData bigData = new BigData();
        bigData.count = 90;
        bigData.data = new Data(); //Data 클래스의 인스턴스 메모리주소 대입
        bigData.data.value = 10;
    }

메모리관점에서 도식화해보자.

profile
Developer

0개의 댓글