개발/Java&Kotlin

[Java] try-with-resources 사용하기

devhooney 2023. 1. 12. 19:18
728x90

자바에는 close() 메소드를 사용해 직접 닫아야 하는 자원이 많음.

ex)

- InputStream

- OutputStream

- java.sql.Connection

...

 

이를 방지하기 위해 try-finally가 많이 쓰였다.

static String firstLineOfFile(String path) throws IOExceiption {
    BufferedReader br = new BufferedReader(new FileReader(path));
    
    try {
    	return br.readLine();
    } finally {
    	br.close();
    }

}

 

 

728x90

 

 

사용해야할 자원이 많아지면

static void copy(String src, String dst) throws IOException {
    InputStream in = new FileInputStream(src);
    
    try {
    	OutputStream out = new FileOutputStream(dst);
        
        try {
        	...
        } finally {
        	out.close();
        }
    	in.close();
    }


}

이러면 코드가 매우 지저분해짐.

 

이를 좀 더 깔끔하게 바꾸면

static void copy(String src, String dst) throws IOException {
    try (
    	InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst)) {
    	
        ...
        
    }
    
}

이렇게 된다.

 

아래 코드가 try-with-resource를 적용한 코드인데, 이 코드가 짧고 읽기 수월하고, 문제를 진단하기에도 훨씬 좋다.

 

 

- 핵심정리

꼭 회수해야 하는 자원을 다룰 때는 try-finally 말고, try-with-resources를 사용.

코드는 더 짧고 분명해지고, 만들어지는 예외 정보도 훨씬 유용.

 

 

- 참고

http://www.yes24.com/Product/Goods/65551284

728x90