
'김영한의 실전 자바' 강의를 보고 정리하였습니다.
참조형 변수에는 항상 객체가 있는 위치를 가리키는 참조값이 들어간다. 그런데 아직 가리키는 대상이 없거나, 가리키는 대상을 나중에 입력하고 싶다면 어떻게 해야할까?
null
참조형 변수에서 아직 가리키는 대상이 없다면 null이라는 특별한 값을 넣어둘 수 있다. null은 값이 존재하지 않는, 없다는 뜻이다.
public class NullMain1 {
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);
}
}

1) Data data = null;
Data 타입을 받을 수 있는 참조형 변수 data에 null 값을 할당했다. 따라서 data 변수에는 아직 가리키는 객체가 없다는 뜻이다.
2) data = new Data();
새로운 Data 객체를 생성해서 그 참조값을 data 변수에 할당했다. 이제 data 변수가 참조할 객체가 존재한다.
3) data = null;
마지막에 다시 data에 null 값을 할당했다. 이렇게 하면 data 변수는 앞서 만든 Data 인스턴스를 더는 참조하지 않는다.
GC - 아무도 참조하지 않는 인스턴스의 최후
앞서 data에 null 값을 할당하여 Data 인스턴스를 더는 아무도 참조하지 않게 되었다. 이렇게 아무도 참조하지 않는 인스턴스는 사용되지 않고 메모리 용량만 차지할 뿐이다.
자바는 아무도 참조하지 않는 인스턴스가 있으면 JVM의 GC(가비지 컬렉션)가 더 이상 사용하지 않는 인스턴스라 판단하고 해당 인스턴스를 자동으로 메모리에서 제거해준다.
객체는 해당 객체를 참조하는 곳이 있으면, JVM이 종료할 때까지 계속 생존한다. 그런데 중간에 해당 객체를 참조하는 곳이 모두 사라지면 그때 JVM은 필요 없는 객체로 판단하고 GC를 사용해서 제거한다.
NullPointerException
참조값 없이 객체를 찾아가면 발생하는 예외이다. 즉 null에 . (dot)을 찍었을 때 발생한다.
참조할 객체 인스턴스가 존재하지 않으면 java.lang.NullPointerException이 발생하고, 프로그램이 종료된다. 예외가 발생했기 때문에 그 다음 로직은 수행되지 않는다.
'Java' 카테고리의 다른 글
[JAVA] 3. 객체 지향 프로그래밍 (1) | 2024.07.12 |
---|---|
[JAVA] 2-2. 기본형과 참조형 - 멤버 변수, 지역 변수와 초기화 (0) | 2024.06.28 |
[JAVA] 2-1. 기본형과 참조형 (0) | 2024.06.28 |
[JAVA] 1. 클래스와 데이터 (0) | 2024.06.26 |

'김영한의 실전 자바' 강의를 보고 정리하였습니다.
참조형 변수에는 항상 객체가 있는 위치를 가리키는 참조값이 들어간다. 그런데 아직 가리키는 대상이 없거나, 가리키는 대상을 나중에 입력하고 싶다면 어떻게 해야할까?
null
참조형 변수에서 아직 가리키는 대상이 없다면 null이라는 특별한 값을 넣어둘 수 있다. null은 값이 존재하지 않는, 없다는 뜻이다.
public class NullMain1 {
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);
}
}

1) Data data = null;
Data 타입을 받을 수 있는 참조형 변수 data에 null 값을 할당했다. 따라서 data 변수에는 아직 가리키는 객체가 없다는 뜻이다.
2) data = new Data();
새로운 Data 객체를 생성해서 그 참조값을 data 변수에 할당했다. 이제 data 변수가 참조할 객체가 존재한다.
3) data = null;
마지막에 다시 data에 null 값을 할당했다. 이렇게 하면 data 변수는 앞서 만든 Data 인스턴스를 더는 참조하지 않는다.
GC - 아무도 참조하지 않는 인스턴스의 최후
앞서 data에 null 값을 할당하여 Data 인스턴스를 더는 아무도 참조하지 않게 되었다. 이렇게 아무도 참조하지 않는 인스턴스는 사용되지 않고 메모리 용량만 차지할 뿐이다.
자바는 아무도 참조하지 않는 인스턴스가 있으면 JVM의 GC(가비지 컬렉션)가 더 이상 사용하지 않는 인스턴스라 판단하고 해당 인스턴스를 자동으로 메모리에서 제거해준다.
객체는 해당 객체를 참조하는 곳이 있으면, JVM이 종료할 때까지 계속 생존한다. 그런데 중간에 해당 객체를 참조하는 곳이 모두 사라지면 그때 JVM은 필요 없는 객체로 판단하고 GC를 사용해서 제거한다.
NullPointerException
참조값 없이 객체를 찾아가면 발생하는 예외이다. 즉 null에 . (dot)을 찍었을 때 발생한다.
참조할 객체 인스턴스가 존재하지 않으면 java.lang.NullPointerException이 발생하고, 프로그램이 종료된다. 예외가 발생했기 때문에 그 다음 로직은 수행되지 않는다.
'Java' 카테고리의 다른 글
[JAVA] 3. 객체 지향 프로그래밍 (1) | 2024.07.12 |
---|---|
[JAVA] 2-2. 기본형과 참조형 - 멤버 변수, 지역 변수와 초기화 (0) | 2024.06.28 |
[JAVA] 2-1. 기본형과 참조형 (0) | 2024.06.28 |
[JAVA] 1. 클래스와 데이터 (0) | 2024.06.26 |