[java] 익셉션 처리를 제대로 하지 않음으로써 발생하는 메모리 누수 예시는 어떤 것들이 있나요?
  1. 리소스 릭: 파일, 네트워크 연결 및 데이터베이스 커넥션과 같은 외부 리소스를 사용할 때, try-catch-finally 구문을 사용하여 예외를 제대로 처리하지 않으면 해당 리소스가 제대로 해제되지 않을 수 있습니다. 이는 메모리 누수를 초래할 수 있습니다.

    // 잘못된 리소스 릭 작성 예시
    public void openFile() {
        FileOutputStream file = null;
        try {
            file = new FileOutputStream("myFile.txt");
            // 파일 작업 수행
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 파일을 닫지 않고 메소드를 종료하면 파일 리소스가 해제되지 않음
    }
    
  2. 무한 재귀 호출: 메소드 내에서 자신을 계속 호출하면서 스택 공간을 계속해서 차지하게 됩니다. 이는 메모리 누수로 이어질 수 있습니다.

    // 잘못된 무한 재귀 호출 예시
    public void infiniteRecursion() {
        infiniteRecursion(); // 자신을 무한히 호출
    }
    
  3. 메모리 누수를 가진 외부 라이브러리 사용: 외부 라이브러리를 사용할 때, 해당 라이브러리가 제대로 메모리를 해제하지 않으면 메모리 누수가 발생할 수 있습니다. 이는 외부 라이브러리에 버그가 있거나 정확한 사용 방법을 따르지 않았을 때 발생할 수 있습니다.

    // 외부 라이브러리에서 메모리 누수가 발생하는 예시
    public void useExternalLibrary() {
        ExternalLibraryObject obj = new ExternalLibraryObject();
        // 외부 라이브러리 객체 사용
        obj.doSomething();
        // obj를 해제하지 않고 메소드를 종료하면 외부 라이브러리 객체가 GC에 의해 수거되지 않음
    }
    

이러한 메모리 누수를 피하기 위해서는 애플리케이션에서 발생할 수 있는 예외 상황에 대한 적절한 예외 처리를 구현하고, 리소스를 사용한 이후에는 반드시 해제하는 등 메모리 관리에 주의해야 합니다.