-
99. JAVA 7 Try 문 자원해제 (try-with-resources)JAVA 2021. 12. 1. 21:37반응형
try-with-resources는 기존 try-catch을 보완하여 자바 7버전에서 도입된 try문입니다.
try-with-resources 문은 하나 이상의 리소스를 선언하는 try문 입니다.
(여기서 리소스란 DBconnetcion, IO 작업 (inputStream, Connection) 등 작업이 완료된 이후 리소스를 닫아주어야하는 개체를 말합니다.)try-with-resources 은 기존 try-catch에서 close()를 실행해주어야 했던 부분을 자동으로 실행시켜주어 소스상의 간결성과 안전성을 제공합니다.
하지만 close()가 자동으로 호출되는 것은 AutoCloseable을 구현한 객체여야만한다는 조건이 있습니다.
( 구현객체여부 https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html )아래 실제 구현된 소스를 보면 좀 더 이해가 잘될것 입니다.
<try-catch>
private static SqlSessionFactory mybitisBbConnenction() { //mybatis 설정파일위치 String resource = "./basicProject/mapper/mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return null; } finally { try { if (inputStream != null) inputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return sqlSessionFactory; }
<try-with-resources>
private static SqlSessionFactory mybitisBbConnenction() { //mybatis 설정파일위치 String resource = "./basicProject/mapper/mybatis-config.xml"; try (InputStream inputStream = Resources.getResourceAsStream(resource)){ sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return null; } return sqlSessionFactory; }
두 소스를 비교해 보면 close()를 자동으로 제공함으로써 try문의 중첩, 객체선언 부분이 훨씬 간결해졌고 개발자의 실수로 close()문을 사용하지 않아 발생하는 누수를 미연에 방지할 수 있습니다.
또한 try-with-resources은 try-catch문과 같이 catch, finally 을 가질 수 있습니다. 다만 리소스의 close() 이후에 catch, finally 블럭이 순차적으로 실행 됩니다.
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
반응형'JAVA' 카테고리의 다른 글
03. JAVA TIME Package 란? (0) 2021.12.30 02. JAVA HttpURLConnection 활용한 API 호출하기(GET, POST, DELETE) (0) 2021.12.26