본문 바로가기
Language/Java

Effective Java 2장 - Item7: 다 쓴 객체 참조를 해제하라

by limeeggpapa 2025. 6. 15.

아이템 7: 다 쓴 객체 참조를 해제하라

  • 핵심 개념

메모리를 직접 관리하는 클래스(ex. 스택)에서, 더 이상 사용하지 않는 객체에 대한 참조를 null로 처리하여 가비지 컬렉터가 메모리를 회수하도록 돕는 것입니다.

  • 장점
  1. 메모리 누수를 방지하여 프로그램 안정성을 높입니다.
  • 단점

코드가 약간 지저분해질 수 있지만, 메모리 누수를 막는 것이 훨씬 중요합니다.

대부분의 경우 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;
    }
}