null
참조형 변수에는 객체가 있는 위치를 가리키는 참조값이 들어간다. 그런데 아직 가리키는 대상이 없거나, 대상을 나중에 입력하고 싶다면 어떻게 해야 할까?
참조형 변수에서는 가리키는 대상이 없다면 null 값을 넣을 수 있다.
public static void main(String[] args) {
Data data = null;
System.out.println("1. data = " + data);
data = new Data();
System.out.println("2. data = " + data);
data = null;
System.out.println("3. data = " + data);
}
GC (가비지 컬렉션)
data에 null을 할당했다. 따라서 앞서 생성한 Data 인스턴스는 아무도 참조하지 않는다.
data = new Data();
System.out.println("2. data = " + data);
data = null;
System.out.println("3. data = " + data);
인스턴트가 생성되었지만 이 주소값을 들고 있는 곳이 없는 것이다. 따라서 해당 인스턴스에 다시 접근할 방법이 없다.
이 인스턴스는 메모리 용량만 차지할 뿐이다. 자바는 이렇게 아무도 참조하지 않는 인스턴스가 있으면 JVM의 GC(가비지 컬렉션)가 더 이상 사용하지 않는 인스턴스라 판단하고 해당 인스턴스를 자동으로 메모리에서 제거한다.
객체는 해당 객체를 참조하는 곳이 있으면 JVM이 종료할 때 까지 계속 생존한다. 그런데 중간에 해당 객체를 참조하는 곳이 모두 사라지면 그때 JVM은 필요 없는 객체로 판단하고 GC를 사용해서 제거한다.
NullPointerException
객체를 참조할 때 .(dot)을 사용한다. 이렇게 하면 참조값을 사용해서 해당 객체를 찾아갈 수 있다. 그런데 참조값이 null이라면 값이 없다는 뜻이므로, 찾아갈 수 있는 객체(인스턴스)가 없다. NullPointerException은 null에 .을 찍었을 때 발생한다.
public static void main(String[] args) {
Data data = null;
data.value = 10;
}
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 기본] 클래스와 메서드 (0) | 2024.07.03 |
---|---|
[Java 기본] 절차 지향 프로그래밍 (0) | 2024.07.02 |
[Java 기본] 변수와 초기화 (0) | 2024.07.02 |
[Java 기본] 기본형과 참조형 - 활용 (0) | 2024.07.02 |
[Java 기본] 기본형과 참조형 - 메서드 호출 (0) | 2024.07.02 |