Skip to content

Latest commit

 

History

History
49 lines (43 loc) · 1.97 KB

19.md

File metadata and controls

49 lines (43 loc) · 1.97 KB

Java 19. try-with-resource에 대해서 설명해주세요.

로마

  • try-with-resource는 자바 7부터 추가된 기능. IO Stream, Connection과 같이 자원 해제가 필요한 경우 간단한 구문을 통해 자원 해제할 수 있게 된다.

  • 자원이 Autocloseable 인터페이스를 구현해야한다.

  • 여러 자원을 이렇게도 선언할 수 있다.

    Connection conn = dataSource.getConnection();
    PreparedStatement pstm = conn.prepareStatement(sql);
    try (conn; pstm) {
           setParams(statement, params);
           statement.execute();
       } catch (final SQLException e) {
           throw new RuntimeException(e);
       }

try-with-resource의 장점?

  • 기존 try-finally 사용 방식에 비해 간결하다.
  • try-finally 버전
    String firstLineOfFile(String path) trows IOException {
        BufferedReader br = new BufferedReader(new FilerReader(path));
        try {
            return br.readLine();
        } finally {
            br.close();
        }
    }
  • try-with-resource 버전
    String firstLineOfFile(String path) trows IOException {
        try (BufferedReader br = new new BufferedReader(new FilerReader(path))){
            return br.readLine();
        }
    }
  • 만들어지는 예외 정보가 유용하다.
    • try-finally 에서 만일 물리적인 에러로 인해서 br.readLine과 br.close 모두 예외가 터질 경우 두 번째인 close의 예외가 readLine의 예외를 집어삼켜 버린다.
      • 따라서 스택 추적 내역에 첫 번째 예외인 br.readLine과 관련된 정보는 남지 않게되어 디버깅이 어려워진다.
    • try-with-resources에서는 양쪽에서 예외가 발생할 경우 readLine의 예외가 기록된다. 숨겨진예외도 버려지지 않고 suppressed(숨겨진) 라는 꼬리표를 달고 출력된다.

참고자료