객체와 메모리
레퍼런스
생성한 객체의 주소를 변수에 저장하는 것을 레퍼런스라고 한다.
- 같은 클래스에서 객체가 생성되었을 지라도, 각 객체는 다른 레퍼런스를 지닌다. (서로 다른 메모리 공간에 할당됨)
메모리에서 객체 생성(동적 생성)
객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 필요없게 되면
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 을 저장해서 객체와 연결이 끊어졌는데,
// 어디있는지도 모르는 객체를 접근하여 메소드를 호출하려고 하니 에러가 발생함
Author And Source
이 문제에 관하여(객체와 메모리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@msung99/객체와-메모리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)