티스토리 뷰
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 구문 같은걸 보면, 여전히 자바는 많은 편의성을 주기 위해서 노력하고 있는 것 같다.
'개발 > JAVA' 카테고리의 다른 글
[Java] PDF 파일을 HTML로 변환하는 법 (convert PDF to HTML) (0) | 2024.02.15 |
---|---|
[JAVA] 핸드폰번호를 E.164 format으로 변환하기 (feat. SMS 인증) (0) | 2023.10.24 |
java.lang.UnsupportedOperationException at java.base/java.util.AbstractList.remove(AbstractList.java:167) 에러 수정하기 (0) | 2023.08.22 |
Java에서 String에 포함된 HTML 태그 제거하기(정규식 사용 X) (0) | 2023.06.22 |
자바 유저를 위한 기본적인 메모리 절약 기술 (0) | 2023.04.21 |
- Total
- Today
- Yesterday
- cache
- OpenAI
- terraform
- serverless
- 후쿠오카
- 람다
- Elastic cloud
- springboot
- JWT
- docker
- OpenFeign
- AWS EC2
- 티스토리챌린지
- lambda
- elasticsearch
- 오블완
- java
- openAI API
- 스프링부트
- GIT
- MySQL
- AOP
- Spring
- S3
- ChatGPT
- EKS
- Log
- CloudFront
- Kotlin
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |