자바(Java) 프로그래밍에서 매우 중요한 개념인 'Try-with-resources'에 대해 깊이 있게 탐구해보려 합니다.
이 기능은 자바 7부터 소개되었으며, 코드를 더 깔끔하고 안전하게 만드는 데 큰 도움이 됩니다.
특히 파일 입출력, 데이터베이스 연결과 같은 자원을 사용할 때 이 기능의 중요성이 더욱 부각됩니다.
Try-with-resources란 무엇인가요?
Try-with-resources는 자바에서 'AutoCloseable' 인터페이스를 구현하는 객체들을 자동으로 닫아주는 구문입니다.
이는 개발자가 명시적으로 자원을 해제하는 번거로움을 줄여주며, 예외 발생 시에도 안전하게 자원을 해제할 수 있도록 도와줍니다.
예제로 바로 알아봅시다.
우선 Try-with-resources를 미사용 해보죠.
예제0: try-catch-finally사용 (Try-with-resources 미사용)
Resource resource = null;
try {
resource = new Resource();
resource.use();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (resource != null) {
try {
resource.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
복잡한거 보이시나요?
안보인다면 아래의 예제들을 살펴보신 다음에
다시 올라와서 보신다면 복잡한 걸 느끼실겁니다.
우선 정리 해보죠
자원을 try-catch-finally 사용해서 받아 올 경우
1. 수동 자원 해제 필요: 자원을 닫기 위한 추가적인 코드가 필요합니다.
이는 코드를 복잡하게 만들고, 자원 누수의 위험을 증가시킵니다.
2. 예외 처리 복잡성 증가: try 블록과 finally 블록에서 예외가 발생할 경우 처리가 복잡해집니다.
finally 블록에서 자원을 닫는 도중 발생하는 예외는 try 블록의 예외를 숨길 수 있습니다.
이제부터 Try-with-resources 예제 시작됩니다.
예제1: 파일읽기
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BasicExample {
public static void main(String[] args) {
String filePath = "/Users/sumin/Desktop/dev/test/sumin.txt"; // 파일 경로
readFile(filePath);
}
public static void readFile(String path) {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 예제에서는 Try-with-resources를 사용하여 파일을 읽는 방법을 보여줍니다.
이 구문을 사용하면 파일 처리가 끝난 후 BufferedReader가 자동으로 닫히게 됩니다.
즉, 자원을 자동으로 해제 해줍니다.
예제2: 데이터베이스 연결
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PracticalExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/board"; // 데이터베이스 URL
String user = "root"; // 계정
String password = "1234"; // 비밀번호
String query = "SELECT * FROM USER"; // SQL 쿼리
accessDatabase(url, user, password, query);
}
public static void accessDatabase(String url, String username, String password, String query) {
try (Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query)) {
while (rs.next()) {
// 데이터 처리 로직
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
일단 사용법은 위의 예제들 처럼 Try 구문 괄호 안에서 자원을 받아오면 됩니다.
Try-with-resources 사용의 장점
1. 자동 자원 해제: 명시적으로 자원을 닫을 필요가 없어 코드가 간결해집니다.
2. 예외 처리 간소화: 예외 발생 시에도 자원이 안전하게 닫힙니다.
이상으로 자바의 Try-with-resources에 대한 내용을 정리 해봤습니다.
다 같이 적극 활용하여 더 안전하고 효율적인 코드를 작성해 보도록 합시다!
참고자료
자바공식 문서
이펙티브 자바 책
'자바' 카테고리의 다른 글
[자바] Form 데이터 파싱후 JUnit5로 테스트 (x-www-form-urlencoded) (2) | 2024.02.17 |
---|---|
[자바]Java Reflection: ModelMapper를 활용한 효율적인 객체 매핑 기법 (1) | 2024.02.11 |
[자바] 레코드(Records) : 코드 간결성과 효율성을 높이는 새로운 방법 (0) | 2024.01.28 |
[자바] 클래스 파일 구조, VM명세서 (0) | 2023.11.14 |
[자바] 문자열 관리: 언제 String, StringBuilder, StringBuffer를 사용해야 할까? (0) | 2023.10.23 |