생성한 객체의 주소를 변수에 저장하는 것을 레퍼런스라고 한다.
객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 필요없게 되면
GC(Garbage Collector) 에 의해서 제거된다.
클래스 객체가 더 이상 쓸모가 없어지면, 클래스 변수는 더 이상 객체의 레퍼런스를 저장하지 않고 버린다.
버려진 객체는 메모리에서 허공에 떠돌아다니는 신세가 된다.
이때 Garbage Collector 가 메모리에 쓸모없는 객체를 지워버린다.
개발자가 클래스로 객체를 생성하고, 필요가 없는 시점에는 개발자가 신경을 쓰지 않아도 GC 가 알아서 메모리를 정리해줘서 메모리를 효율적으로 관리할 수 있다!
레퍼런스에 null 이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없다.
null 이 저장되면 객체를 GC가 처리한다.
결국 객체를 이용하지 못하므로 메소드를 호출하여도 NullException 이 발생한다.
obj1.getInfo(); // 메소드 사용 가능
obj1 = null;
System.out.println("obj1:" + obj1); // null 출력
obj1.getInfo(); // 에러 발생 => null 을 저장해서 객체와 연결이 끊어졌는데,
// 어디있는지도 모르는 객체를 접근하여 메소드를 호출하려고 하니 에러가 발생함