[Java] try - with - resources로 자원해제 처리
by coco3o반응형
자바에서 외부 자원에 접근하는 경우 주의해야할 점은 외부자원을 사용한 뒤 제대로 자원을 닫아줘야 한다.
자원을 닫을 때 try - catch - finally 구문 대신 try - with - resources 구문을 사용하면 코드의 가독성이 더 증가한다.
try-catch-finally로 자원 해제
try-catch-finally 구문으로 자원을 해제하려면 코드가 길어지고 지저분하다.
아래는 try-catch-finally을 사용한 자원해제의 예제 코드이다.
FileOutputStream out = null;
try {
out = new FileOutputStream("exFile.txt");
// ... 이후 입출력 로직 처리 ...
}catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(out != null) { //스트림이 null인지 체크
try {
out.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
try-with-resources로 자원 쉽게 해제
Java 7에서 try - with - resources 구문이 추가되었다.
try - with - resources를 사용하기 위해서는 close메소드를 정의하기 위한 AutoCloseable 인터페이스를 구현해야 한다.
위에서 기존의 입출력 처리시의 예외처리는 다음과 같이 바뀌어 사용된다.
아래의 코드는 try-with-resources 를 사용하여 자원을 쉽게 해제하는 예제이다. 실행결과는 위의 예제와 동일하다.
try(FileOutputStream out = new FileOutputStream("exFile.txt")) {
// ...이후 입출력 로직 처리...
}catch (IOException e) {
e.printStackTrace();
}
try - with - resources 는 위의 코드와 같이
try(. . .)에 자원 객체를 전달하면, try 코드 블록이 끝나고 자동으로 자원을 해제해주는 기능이다.
즉, 따로 finally 구문이나 모든 catch 구문에 종료 처리를 하지 않아도 된다.
이 때, try에 전달할 수 있는 자원은 AutoCloseable 인터페이스의 구현체로 한정된다.
AutoCloseable은 JDK 1.7부터 추가된 인터페이스다.
/**
* @author Josh Bloch
* @since 1.7
*/
public interface AutoCloseable {
void close() throws Exception;
}
아래와 같이 try( ) 안에 복수의 자원 객체를 전달할 수 있다.
try(Something1 s1 = new Something1();
Something2 s2 = new Something2()) {
} catch(...) {
...
}
반응형
'🌈Programming > Java' 카테고리의 다른 글
온라인 자바 스터디 #11 - Enum (0) | 2021.01.26 |
---|---|
온라인 자바 스터디 #10 - 멀티쓰레드 프로그래밍 (0) | 2021.01.19 |
온라인 자바 스터디 #9 - 예외 처리 (0) | 2021.01.11 |
System.out.println() (0) | 2021.01.06 |
온라인 자바 스터디 #8 - 인터페이스 (0) | 2021.01.04 |
블로그의 정보
슬기로운 개발생활
coco3o