Closeable 인터페이스

LeeYulhee·2023년 11월 20일
0

👉 Closeable 인터페이스


  • Java에서 Closeable 인터페이스는 어떤 자원(예를 들어 파일, 네트워크 연결 등)을 사용한 후에 안전하게 닫을 수 있도록 도와주는 기능을 제공
  • 이것은 특히 파일이나 네트워크 연결과 같은 시스템 자원을 사용하는 객체들에게 중요



👉 주요 기능 : 자원 닫기


  • Closeable 인터페이스에는 close() 메소드가 있는데, 해당 메서드는 자원을 닫을 때 사용
  • 예를 들어, 파일을 읽고 난 후에는 그 파일을 닫아야 메모리 누수 등을 방지할 수 있음
  • 이렇게 시스템 자원을 해제해야 다른 프로그램이나 작업이 해당 자원을 사용할 수 있음



👉 Closeable 인터페이스를 구현한 클래스 예시


  • 파일 입출력 클래스
    • FileInputStream: 파일에서 바이트 단위로 데이터를 읽어들이는 데 사용
    • FileOutputStream: 파일에 바이트 단위로 데이터를 쓰는 데 사용
    • FileReader: 텍스트 파일에서 문자 단위로 데이터를 읽어들이는 데 사용
    • FileWriter: 텍스트 파일에 문자 단위로 데이터를 쓰는 데 사용
  • 버퍼 입출력 클래스
    • BufferedReader: 텍스트 데이터를 효율적으로 읽기 위한 버퍼를 제공
    • BufferedWriter: 텍스트 데이터를 효율적으로 쓰기 위한 버퍼를 제공
    • BufferedInputStream: 바이트 스트림 데이터를 효율적으로 읽기 위한 버퍼를 제공
    • BufferedOutputStream: 바이트 스트림 데이터를 효율적으로 쓰기 위한 버퍼를 제공
  • 네트워크 클래스
    • Socket: 네트워크를 통해 다른 시스템과 통신할 때 사용되는 소켓
    • ServerSocket: 서버 측에서 클라이언트의 연결을 기다리는 데 사용
  • 기타 스트림 클래스
    • ObjectInputStream: 객체를 직렬화하여 스트림을 통해 읽는 데 사용
    • ObjectOutputStream: 객체를 직렬화하여 스트림을 통해 쓰는 데 사용



👉 사용 예시(try-catch-finally)


FileInputStream fileInputStream = null;

try {
    fileInputStream = new FileInputStream("example.txt");
    // 파일에서 데이터를 읽음
} catch (IOException e) {
    // 오류 처리
} finally {
    if (fileInputStream != null) {
        try {
            fileInputStream.close(); // 파일을 닫음
        } catch (IOException e) {
            // 닫는 동안 발생한 오류 처리
        }
    }
}
  • 파일을 읽을 때, FileInputStream 같은 클래스를 사용
    • 이 클래스는 Closeable 인터페이스를 구현하기 때문에, close() 메소드를 사용하여 파일을 닫을 수 있음
  • try-catch-finally
    • try 블록에서 코드를 실행하고, catch 블록에서 예외를 처리하며, finally 블록에서 자원을 해제
    • finally 블록에 있는 코드는 try 블록 내에서 예외 발생 여부와 상관없이, catch 블록 내에서 예외 처리 여부와 상관없이 항상 실행됨



👉 try-with-resources와 Closeable


try (FileInputStream files = new FileInputStream("example.txt")) {
    // 파일에서 데이터를 읽음
} catch (IOException e) {
    // 오류 처리
}
// try 블록이 끝나면 FileInputStream은 자동으로 닫힘
  • Java 7 이상에서는 try-with-resources라는 기능을 사용할 수 있음
    • ⇒ Closeable 인터페이스나 AutoCloseable 인터페이스를 구현하는 자원을 자동으로 닫아주는 기능
  • try-with-resources를 사용하면 finally 블록에서 직접 close()를 호출할 필요가 없음
    • Java가 알아서 자원을 닫음
  • 사용 방법
    • 자원을 try() 블록 안에 선언



👉 Closeable을 구현하지 않은 자원의 관리


  • 해당 클래스에서 구현한 자원 해제 메서드가 있는지 확인
  • 직접 메서드를 정의하는 방법도 있음
  • 아니면 해당 자원에 대한 참조를 null로 설정하거나 자원을 닫는데 필요한 특정 메서드를 호출
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보