오늘은 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 자원반납 순서로 작업이 일어납니다.
'JAVA' 카테고리의 다른 글
Web 채팅 프로그램 만들기 (1) | 2023.06.19 |
---|---|
함수형 프로그래밍(Functional Programming) 이란? (3) | 2023.05.21 |
JAVA 메모리 영역 (0) | 2023.03.21 |
댓글