객체와 메모리


레퍼런스

생성한 객체의 주소를 변수에 저장하는 것을 레퍼런스라고 한다.

  • 같은 클래스에서 객체가 생성되었을 지라도, 각 객체는 다른 레퍼런스를 지닌다. (서로 다른 메모리 공간에 할당됨)

메모리에서 객체 생성(동적 생성)

객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 필요없게 되면
GC(Garbage Collector) 에 의해서 제거된다.

  • 클래스 객체가 더 이상 쓸모가 없어지면, 클래스 변수는 더 이상 객체의 레퍼런스를 저장하지 않고 버린다.

  • 버려진 객체는 메모리에서 허공에 떠돌아다니는 신세가 된다.

  • 이때 Garbage Collector 가 메모리에 쓸모없는 객체를 지워버린다.

개발자가 클래스로 객체를 생성하고, 필요가 없는 시점에는 개발자가 신경을 쓰지 않아도 GC 가 알아서 메모리를 정리해줘서 메모리를 효율적으로 관리할 수 있다!


Null 와 Exception

  • 레퍼런스에 null 이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없다.

  • null 이 저장되면 객체를 GC가 처리한다.

  • 결국 객체를 이용하지 못하므로 메소드를 호출하여도 NullException 이 발생한다.

obj1.getInfo(); // 메소드 사용 가능

obj1 = null;
System.out.println("obj1:" + obj1); // null 출력
obj1.getInfo(); // 에러 발생 => null 을 저장해서 객체와 연결이 끊어졌는데, 
// 어디있는지도 모르는 객체를 접근하여 메소드를 호출하려고 하니 에러가 발생함

좋은 웹페이지 즐겨찾기