메모리에서 객체 생성(동적 생성)
객체는 메모리에서 동적으로 생성되며, 객체가 더이상 필요 없게 되면 Gabage Collector에 의해서 제거된다.
개발자는 객체를 만들기 위해서 Class를 만든다. new 연산자를 사용해 객체를 만들면 객체들은 메모리에 생성된다.
ChildClass child = new ChildClass();
여기서 child를 레퍼런스라고 한다. 이때 chlid는 메모리에 생성된 객체가 담긴 주소를 갖고있다.
(레퍼런스는 가리키다 라는 뜻!)
레퍼런스가 객체를 가리키고 있다가 더이상 객체가 필요없게 되면 더이상 그 객체를 가리키지 않는다.(관계를 끊어버린다.)
그러면 그 객체에는 어떠한 레퍼런스도 존재하지 않게된다. ( 이미지에서 노란색 obj)
허공에 떠있는 임자 없는 객체는 Gabage Collector가 판단해서 회수해 객체를 메모리에서 지워버린다.
개발자는 Class로 부터 객체를 생성해서 사용하면 된다. 필요 없어진 객체는 개발자가 신경쓰지 않아도 GC가 알아서 처리해준다!
레퍼런스
생성한 객체의 주소를 변수에 저장하는 것을 레퍼런스라고 한다.
같은 클래스 ObjectClass로 객체 3개를 생성하면 그 객체들은 모두 동일한 공간에 생성된 것이 아니라 별도로 생성된다.
즉, 3개의 레퍼런스(obj1, obj2, obj3)가 가리키는 메모리의 주소가 다르다는 뜻이다.
null과 NullPointException
레퍼런스에 null이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 사용할 수 없다.
obj1 에 null 값을 넣게되면 레퍼런스와 객체의 연결이 끊기며 sysout으로 출력했을 때 null이 나온다.
관계가 끊겼음에도 .getInfo()를 통해 그 메소드를 호출하게 되면 가리키는 곳이 없기 때문에 NullPointException이 발생한다.
'Language > Java' 카테고리의 다른 글
[JAVA] 인터페이스 (0) | 2022.01.16 |
---|---|
[JAVA] 생성자 (0) | 2021.11.09 |
[자바 프로그래밍 입문] 02 Java 프로그램의 실행 구조 (0) | 2021.11.04 |
[자바 프로그래밍 입문] 01 Hello Java World! (0) | 2021.11.03 |
[JAVA] Chapter 02 - 1 변수 (0) | 2019.11.12 |