반응형
이번 글에서는 자바에서 객체가 가비지 컬렉션(Garbage Collection)의 대상이 되는 시점과,
참조 변수의 역할에 대해 간단한 예제를 통해 알아봅니다.
자바는 C언어처럼 개발자가 직접 메모리를 해제하지 않고,
JVM이 자동으로 사용하지 않는 객체를 정리해줘요.
이때, 더 이상 참조되지 않는 객체는 가비지 컬렉터에 의해 제거됩니다.
📌 예제 코드
public class GarbageObjectExample {
public static void main(String[] args) {
String hobby = "여행";
hobby = null;
String kind1 = "자동차", kind2 = kind1;
kind1 = null;
System.out.println("kind2 : " + kind2);
}
}
💬 코드 설명
- String hobby = "여행";
"여행"이라는 문자열 객체가 메모리에 생성되고, hobby가 이를 참조합니다. - hobby = null;
이제 hobby는 "여행" 객체를 참조하지 않게 되므로,
"여행"은 가비지 컬렉션의 대상이 됩니다. - String kind1 = "자동차", kind2 = kind1;
"자동차"라는 문자열을 kind1과 kind2가 동시에 참조하고 있습니다. - kind1 = null;
이제 kind1은 참조를 잃지만, kind2가 여전히 참조하고 있기 때문에
"자동차"는 가비지 컬렉션 대상이 아닙니다. - System.out.println("kind2 : " + kind2);
kind2가 "자동차"를 참조하고 있으므로 출력됨
💻 실행 결과
kind2 : 자동차
📌 간단 정리
변수 | 참조 여부 | 설명 |
hobby | ❌ | null로 설정됨 → "여행"은 가비지 컬렉션 대상 |
kind1 | ❌ | null로 설정됨 |
kind2 | ✅ | "자동차"를 참조 중 → 가비지 컬렉션 대상 아님 |
💡 포인트 정리
- 참조가 모두 사라진 객체는 가비지 컬렉션 대상이 됨
- null을 대입하면 해당 참조는 끊기지만, 다른 참조가 남아 있으면 객체는 유지됨
- 자바에서는 메모리 관리를 직접하지 않고, JVM이 자동으로 정리함
'프로그래밍 > JAVA' 카테고리의 다른 글
25. 문자열 길이 검사 - length() 메서드 (0) | 2025.04.22 |
---|---|
24. 빈 문자열 비교 - ""와 equals() (0) | 2025.04.21 |
23. 문자열 비교 - == vs .equals() (0) | 2025.04.21 |
21. break문 - 반복문 강제 종료하기 (0) | 2025.04.21 |
20. 배열의 비교 - 참조값 vs 값 (0) | 2025.04.21 |
19. continue문을 이용한 반복 제어 예제 (0) | 2025.04.21 |