인프런
자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
색션 2. JAVA 객체
객체와 메모리
14-1 : 메모리에서 객체 생성 (동적 생성)
객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 필요 없게 되면 GC(Gabage Collector)에 의해서 제거됨
class | 생성 | obj. | obj. | 제거 | GC (Gabage Collector) |
||||
↑ | obj. | obj. | |||||||
| | ↑ | obj. | |||||||
| | | | ↑ | obj. | ||||||
주소 | 주소 | 주소 | ↑ | ||||||
obj. | 주소 |
어떠한 레퍼런스와 관계가 없다고 생각하면 메모리를 정리하다가 가비지 컬렉터가 회수함
그 객체를 메모리에서 지움
그러면 메모리가 조금 더 넉넉해짐
넉넉하게 있다가 새로운 객체가 생성되면 그 메모리 사용할 수 있음
14-2 : 레퍼런스 (가리킨다)
생성한 객체의 주소를 변수에 저장하는 것을 레퍼런스라고 한다.
obj. | obj. | obj. | |||
↑ | obj. | ↑ | ↑ | ||
| | ↑ | 주소 | 주소 | ||
| | | | ||||
주소 | 주소 |
주소들 레퍼런스
package pjtTest;
public class ObjectClass {
}
package pjtTest;
public class MainClass_ObjectClass {
public static void main(String[] args) {
ObjectClass obj1 = new ObjectClass();
ObjectClass obj2 = new ObjectClass();
ObjectClass obj3 = new ObjectClass();
System.out.println(" obj1 : " + obj1);
System.out.println(" obj2 : " + obj2);
System.out.println(" obj3 : " + obj3);
}
}
obj1 : pjtTest.ObjectClass@506e1b77
obj2 : pjtTest.ObjectClass@4fca772d
obj3 : pjtTest.ObjectClass@9807454
똑같은 클래스에서 생성했지만 객체가 엄연히 다른 메모리 공간에 존재함을 알 수 있음
그러기에 안에 속성값이 다 다르다고 취급
14-3 : 자료형이 같아도 다른 객체
자료형이 같아도 다른 공간에 존재하는 객체는 다른 객체이다.
class | 생성 | obj. | |||||
↑ | obj. | ||||||
| | ↑ | obj. | |||||
| | | | ↑ | obj. | ||||
주소 | 주소 | 주소 | ↑ | ||||
주소 |
package pjtTest;
public class MainClass_ObjectClass {
public static void main(String[] args) {
ObjectClass obj1 = new ObjectClass();
ObjectClass obj2 = new ObjectClass();
ObjectClass obj3 = new ObjectClass();
/*System.out.println(" obj1 : " + obj1);
System.out.println(" obj2 : " + obj2);
System.out.println(" obj3 : " + obj3); */
if(obj1 == obj2) {
System.out.println("obj1 = obj2");
} else {
System.out.println("obj1 != obj2");
}
if(obj2 == obj3) {
System.out.println("obj2 = obj3");
} else {
System.out.println("obj2 != obj3");
}
if(obj1 == obj3) {
System.out.println("obj1 = obj3");
} else {
System.out.println("obj1 != obj3");
}
}
}
obj1 != obj2
obj2 != obj3
obj1 != obj3
14-4 : null과 NullPointException
레퍼런스에 null 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없음
obj. | |||||
↑ | obj. | ||||
| | ↑ | obj. | |||
| | | | ↑x | obj. | ||
주소 | 주소 | null | ↑x | ||
null |
package pjtTest;
public class ObjectClass {
public void getInfo() {
System.out.println(" -- getInfo() --");
}
}
package pjtTest;
public class MainClass_ObjectClass {
public static void main(String[] args) {
ObjectClass obj1 = new ObjectClass();
ObjectClass obj2 = new ObjectClass();
obj1.getInfo();
}
}
-- getInfo() --
package pjtTest;
public class MainClass_ObjectClass {
public static void main(String[] args) {
ObjectClass obj1 = new ObjectClass();
ObjectClass obj2 = new ObjectClass();
obj1.getInfo();
obj1 = null; //레퍼런스 x 레퍼런스가 끊김 그래서회수해감
obj1.getInfo();
}
}
-- getInfo() --
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "pjtTest.ObjectClass.getInfo()" because "obj1" is null
at pjtTest/pjtTest.MainClass_ObjectClass.main(MainClass_ObjectClass.java:34)
관계 끊겨서 호출 x
package pjtTest;
public class MainClass_ObjectClass {
public static void main(String[] args) {
ObjectClass obj1 = new ObjectClass();
ObjectClass obj2 = new ObjectClass();
obj1.getInfo();
obj1 = null; //레퍼런스 x 레퍼런스가 끊김 그래서회수해감
//obj1.getInfo();
obj2.getInfo();
}
}
-- getInfo() --
-- getInfo() --
null로 끊기면 더 이상 객체에 접근할 수 없음
'교내 개발 공부 > [학교 지원 Study] 자바 프로그래밍 입문' 카테고리의 다른 글
생성자와 소멸자 그리고 this 키워드 | 디폴트 생성자 | 사용자 정의 생성자 (1) | 2023.09.03 |
---|---|
JAVA 객체 | 메서드 | 매개변수(parameter) | 중복 메서드 (overloading) | 접근자 | private | public (0) | 2023.08.28 |
JAVA 객체 | 클래스 제작과 객체 생성 | 멤버 변수(속성), 메서드(기능), 생성자 | 자동차 클래스 생성 | 자전거 클래스 생성 | 메인 클래스 | 레퍼런스 (0) | 2023.08.28 |
JAVA 객체 | 객체 지향 프로그래밍 | 객체 | 클래스 (0) | 2023.08.28 |
JAVA 기초 문법 | 반복문 | for문 | while문 | scanner | do~while문 (1) | 2023.08.21 |