
아이템 7: 다 쓴 객체 참조를 해제하라
- 핵심 개념
메모리를 직접 관리하는 클래스(ex. 스택)에서, 더 이상 사용하지 않는 객체에 대한 참조를 null로 처리하여 가비지 컬렉터가 메모리를 회수하도록 돕는 것입니다.
- 장점
- 메모리 누수를 방지하여 프로그램 안정성을 높입니다.
- 단점
코드가 약간 지저분해질 수 있지만, 메모리 누수를 막는 것이 훨씬 중요합니다.
대부분의 경우 GC가 알아서 처리하므로, 직접 메모리를 관리하는 특별한 경우에만 해당됩니다.
💡 예제 비교
직접 구현한 스택에서 원소를 꺼내는 pop 메서드를 살펴봅시다.
❌ 잘못된 예 (메모리 누수 발생)
public class Stack {
private Object[] elements;
private int size = 0;
// ...
public Object pop() {
if (size == 0) throw new EmptyStackException();
// size만 줄이고 배열에 남아있는 객체 참조는 그대로 둠
// 스택에서 꺼내졌지만, GC는 이 객체를 수거하지 못함 (메모리 누수)
return elements[--size];
}
}
⭕ 잘된 예 (참조 해제)
public class Stack {
private Object[] elements;
private int size = 0;
// ...
public Object pop() {
if (size == 0) throw new EmptyStackException();
Object result = elements[--size];
// 다 쓴 참조는 null로 처리하여 GC가 수거할 수 있도록 함
elements[size] = null;
return result;
}
}
'Language > Java' 카테고리의 다른 글
| Effective Java 2장 - Item9: try-finally보다 try-with-resources를 사용하라 (0) | 2025.06.15 |
|---|---|
| Effective Java 2장 - Item8: finalizer와 cleaner 사용을 피하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item6: 불필요한 객체 생성을 피하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item4: 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item3: private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2025.06.15 |