[java] 자바 프로그래밍에서 자주 발생하는 메모리 누수 예시는 무엇인가요?

예를 들어, 다음과 같은 코드를 생각해봅시다.

public class MyClass {
    private List<Integer> numbers = new ArrayList<>();

    public void addNumber(int number) {
        numbers.add(number);
    }
    
    public List<Integer> getNumbers() {
        return numbers;
    }
}

이 코드에서 MyClass의 객체를 생성하고 addNumber() 메소드를 호출하여 숫자를 계속해서 추가할 수 있습니다. 그러나 MyClass의 객체를 사용하는 동안 숫자를 계속해서 추가하고 레퍼런스를 유지하는 것을 잊어버린다면, MyClass 객체가 더 이상 필요하지 않게 되더라도 해당 객체는 가비지 컬렉션의 대상이 되지 않고 메모리에 계속 남게 됩니다. 이렇게 메모리에 더 이상 필요하지 않은 객체가 계속 쌓이는 것을 메모리 누수라고 합니다.

메모리 누수를 방지하기 위해선, 더 이상 사용되지 않는 객체는 명시적으로 정리해야 합니다. 위의 예시에서는 MyClass의 객체를 더 이상 사용하지 않게 되면, numbers 레퍼런스를 null로 설정하여 메모리 누수를 방지할 수 있습니다.

public void clearNumbers() {
    numbers = null;
}

이렇게 하면 가비지 컬렉션의 대상이 되어 메모리에서 정리됩니다. 메모리 누수는 프로그램 성능에 영향을 미칠 수 있으므로, 자바 프로그래밍에서는 메모리 누수를 최소화하기 위해 주의해야 합니다.