본문 바로가기

Back-end/Java

[Java] try-with-resources

try-with-resources자바 버전 7에 도입된 문법입니다.

 

자바 7 버전 이전에서 하나 이상의 리소스(java.lang.AutoCloseable을 구현한 객체 혹은 java.io.Closeable를 구현한 객체)를 사용할 경우 개발자가 임의로 finally문에서 ~~.close()를 사용하여 자원 해체를 시켜줘야 했습니다.

 

만약 개발자가 사용한 자원을 finally문에서 해제시켜주지 않고 누락시켰다면 자원이 해제되지 않은 채로 프로그램이 오작동하게 되고, finally문에서 자원을 해제 시켜주더라도 자원 해제를 위한 중복 코드가 발생하기 때문에 소스 코드의 가독성을 해지는 단점이 있었습니다.

 

이를 해결하기 위해 try()안에 사용할 리소스 객체를 명시적으로 선언하여 사용하면,

try 블록 안에서 로직이 정상적으로 완료되었는지, 갑작스럽게 완료되었는지 여부와 관계없이

JVM에서 자동으로 자원을 반납해주는 기능을 하도록 도입하였습니다.

 

추가로, 자바 9 버전에서는 try()문 안에 명시적으로 객체 선언을 하기 보다는 try문 바깥에서 객체 선언을 하고 생성된 인스턴스의 변수를 넣어줄 수 있도록 바뀌었습니다.

 

Java 7 : try(BufferedReader br = new BufferedReader())

Java 9 : try(br)