본문 바로가기
JAVA

[JAVA] - try(){}, Try-with-resources 란?

by 집도리잡동사니 2022. 11. 7.
반응형

오늘은 try(){} 문법을 한번 공부해보려고 합니다.

공부하게된 계기는 java interface작업 도중 BufferedReader 클래스를 사용하는데,

제가 예전에 알던 문법은

이런식의 코드였습니다. try문 안에서 자원을 생성하고, finally 문에서 자원을 해제한다.

그런데 개발하려고 찾아보던 중

이런식으로 개발코드를 작성한것을 발견하였습니다. 저는 처음에는 bf객체를 자원 해제하는것을 잊어버린줄 알았는데, 역시나 아는만큼 보이는걸까요, JAVA 7 이상부터 try(){} 구문이 가능하다고 하더라고요.

 

저는 제가 만든 코드에 대해 혹시나 놓치는 부분이나 잘못된 부분이 있을까봐 잘 모르는 구문이나 궁금한것들은 찾아보고 완전히?! 어느정도 이해했을때 코드를 사용하는데, try(){}구분을 처음봐서 찾아보았더니,

try() 구문안에서 생성된 객체는 try{} 블럭 안에서만 존재하며, try문이 끝날 때 자동으로 자원을 해제해준다고 하더라고요.

 

결론

기존 JAVA7 이전에는 자원을 해제해주려면 try문 안에서 더 이상 객체를 사용하지 않을때 자원을 해제해주고 finally 블럭을 생성하여서 해당 블럭안에서 자원을 해제해주어야 했었는데, JAVA7부터는 try() 문안에서 생성한 자원은 자원을 따로 해제해주지 않아도 try{}블럭이 끝나는 시점에 자원이 자동으로 해제가 됩니다.

장점

소스가 간결해지며, 개발자가 자원을 해제하는것을 잊어버리더라도 알아서 자원을 해제해준다는 장점이 있습니다.

 

단점

처음부터 try(){} 구문으로 자원을 생성하는걸 배운 개발자는 원래는 해당 자원을 따로 해제해주어야 한다는것을 모를수 있기 때문에 추후에 이런 부분에서 실력차이가 날수 있다고 생각합니다.

잘모르는 개발자의 생각이였습니다.

 

또한 입출력 객체를 try문안에서

try(입출력 객체 1 = new 입출력; 입출력 객체 2 = new 입출력 ){

 

}

이런식으로 입출력 객체를 두개를 생성을 하게되면 생성되는 순서와 자원을 반납하는 순서는

객체1생성 -> 객체2 생성 -> 객체2 자원반납 -> 객체1 자원반납 순서로 작업이 일어납니다.

 

728x90
반응형

'JAVA' 카테고리의 다른 글

Web 채팅 프로그램 만들기  (1) 2023.06.19
함수형 프로그래밍(Functional Programming) 이란?  (3) 2023.05.21
JAVA 메모리 영역  (0) 2023.03.21

댓글