일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자동빌드
- Javascript
- 대용량 업로드
- 자동배포
- mom
- 자바8
- 스트림
- QueryDSL
- JQuery
- Stream
- MessageQueue
- apache.poi
- 보안
- ci/cd
- java
- rabbitmq
- JPA
- ORM
- 그리드
- poi
- DevOps
- mssql
- jqGrid
- 엑셀 업로드
- spring
- 제이쿼리그리드
- Jenkins
- docker
- sqlserver
- stream api
- Today
- Total
개발 메모장
[Java] try with Resources 문(리소스 자동 반환) 본문
#. 자바로 개발하다 보면 파일, DB연결, 네트워크 연결 등 읽기, 쓰기를 위한 자원을 사용해야 할 때가 있을 것입니다.
#. 이때 자바 자원을 사용하고 난 뒤 .close()를 하는 것을 까먹고 안 하는 경우가 생기기도 합니다.
#. 사용자가 하나하나 번거롭게 close 하는 방법도 있지만 자바가 직접 관리하여 사용자가 신경 쓰지 않아도 자원을 반환하여 편하게 이용할 수 있는 방법입니다.
#. 자원이 반환되지 않으면 콘솔에 별도 오류가 나타나지 않고 자바에서 자원을 할당하고 있기 때문에 만든 파일을 열려고 하면 다른 프로그램에서 사용 중이라는 오류가 발생하며 정상 실행되지 않을 것입니다.
#. 리소스의 초기화는 try블록 내에서 발생하며 반드시 close() 기능이 있는 리소스만이 인스턴스로 사용되어야 합니다.
#. try 리소스 문은 자바 7부터 도입된 기능입니다.
#. try ~ catch ~ finally 문 사용방법
public void tryCatchFinally() throws IOException {
String path = "C:/";
String file = "test.txt";
// 자원 사용
BufferedReader br = new BufferedReader(new FileReader(path));
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file);
try {
파일 읽기, 쓰기에 관련한 로직 ;
} catch (Exception e) {
예외처리 ;
} finally {
// 자원 반환
fos.close();
fis.close();
br.close();
}
}
- 위와 같이 br, fis, fos 자원을 사용하고 finally 구문에서 반드시 close()를 해주어야 합니다.
#. try with Resources 문 사용방법
public void tryResources() throw IOException {
String path = "c";
String file = "test.txt";
// 자원 사용 및 자동 반환
try(BufferedReader br = new BufferedReader(new FileReader(path));
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file)) {
파일 읽기, 쓰기에 관련한 로직 ;
} catch (Exception e) {
예외처리 ;
}
}
- 이처럼 별도 finally 구문에 자원반환 선언을 하지 않아도 되기에 개발자가 신경 쓰지 않아도 됩니다.
- 정상적으로 처리가 완료되었거나 오류 발생으로 예외처리 되는 경우 모두 자원을 자동 반환합니다.
- 사소한 것으로 보이지만 신경 써야 할 것이 많은 개발자를 위해 이 사소한 것도 크게 작용할 수 있을 것 같습니다.
===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!
===========================================================
'Java' 카테고리의 다른 글
[Java] Stream API(1) - 스트림 데이터 생성 (0) | 2023.12.12 |
---|---|
[Java] Zip 파일 생성 후 파일 다운로드(Ajax 이용) (1) | 2023.12.08 |
[Java] 공공데이터 - 공휴일 API 사용하기 (1) | 2023.12.06 |
[Java] OOM과 GC (Out of Memory Error와 가비지 컬렉터) (1) | 2023.12.04 |
[Java] String, StringBuffer, StringBuilder의 특징 및 차이점 (1) | 2023.11.29 |