티스토리 뷰

java의 poi를 이용해 엑셀파일을 핸들링할 일이 생겼다.

 

poi는 엑셀 파일을 핸들링하기 위해 workbook이라는 객체를 생성한다.

 

별 생각없이 객체를 생성해서 사용하는데 IntelliJ에서 아래와 같은 알림을 던져줬다.

 

원래는 노란 줄로 경고를 주는데, 이전에 무시하도록 설정해버렸음

try-with-resources으로 덮으라는데 이게 뭘까? 일단 클릭해본다.

 

그러면 try 구문으로 해당 라인이 변경된다.

try (Workbook workbook = new XSSFWorkbook()) {
    Sheet sheet = workbook.createSheet(sheetName);
    ...
catch (IOException e) {
	e.printStackTrace();
}

 

try-with-resources 구문을 왜 쓸까?

 

try-with-resources 구문은 Java 7부터 도입된 기능으로, 자동으로 리소스가 종료되게 지원해주는 기능이다.

 

만약 try-with-resources을 사용하지 않으면, 아래와 같이 명시적으로 자원을 해제해줘야 한다.

Workbook workbook = new XSSFWorkbook()
Sheet sheet = workbook.createSheet(sheetName);
...

workbook.close(); // try-with-resources을 안쓰면, workbook을 해제해줘야함

입출력 스트림, 네트워크 연결 및 데이터베이스 연결과 같이 명시적으로 자원을 해제해야 하는 경우에 사용할 수 있는데

 

아무 클래스에나 사용할 수 있는건 아니고, AutoCloseable 인터페이스를 상속받고 있는 클래스에만 사용이 가능하다.

 

Workbook 클래스도 따라 올라가다보면 AutoCloseable 인터페이스를 상속받은 걸 확인할 수 있다.

 

 

자바에서는 io와 관련된 웬만한 클래스들이 AutoCloseable 인터페이스를 상속받고 있다.

 

- 입출력 관련 클래스

InputStream, OutputStream, Reader, Writer 등

 

- 파일 관련 클래스

FileInputStream, FileOutputStream, FileReader, FileWriter 등

 

- 네트워크 관련 클래스

Socket, ServerSocket 등

 

- 데이터베이스 연결 관련 클래스
Connection, ResultSet, Statement, PreparedStatement 등 

 

자바 9부터 Thread 클래스까지 생각보다 많은 클래스들이 try-with-resources 구문을 지원한다.

 

마치며

필자는 맨날 자바 별로라고 욕하고 다닌다.

 

하지만 try-with-resources 구문 같은걸 보면, 여전히 자바는 많은 편의성을 주기 위해서 노력하고 있는 것 같다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함