개발 메모장

[Java] try with Resources 문(리소스 자동 반환) 본문

Java

[Java] try with Resources 문(리소스 자동 반환)

yyyyMMdd 2023. 11. 27. 17:26
728x90

#. 자바로 개발하다 보면 파일, DB연결, 네트워크 연결 등 읽기, 쓰기를 위한 자원을 사용해야 할 때가 있을 것입니다.


#. 이때 자바 자원을 사용하고 난 뒤 .close()를 하는 것을 까먹고 안 하는 경우가 생기기도 합니다.


#. 사용자가 하나하나 번거롭게  close 하는 방법도 있지만 자바가 직접 관리하여 사용자가 신경 쓰지 않아도 자원을 반환하여 편하게 이용할 수 있는 방법입니다.


#. 자원이 반환되지 않으면 콘솔에 별도 오류가 나타나지 않고 자바에서 자원을 할당하고 있기 때문에 만든 파일을 열려고 하면  다른 프로그램에서 사용 중이라는 오류가 발생하며 정상 실행되지 않을 것입니다.

 

#. 리소스의 초기화는 try블록 내에서 발생하며 반드시 close() 기능이 있는 리소스만이 인스턴스로 사용되어야 합니다.


#. try 리소스 문은 자바 7부터 도입된 기능입니다.

 


#. try ~ catch ~ finally 문 사용방법

public void tryCatchFinally() throws IOException {
	String path = "C:/";
	String file = "test.txt";
	
   	// 자원 사용
	BufferedReader br = new BufferedReader(new FileReader(path));
	FileInputStream fis = new FileInputStream(file);
	FileOutputStream fos = new FileOutputStream(file);
		
	try {
		파일 읽기, 쓰기에 관련한 로직 ;
	} catch (Exception e) {
		예외처리 ;
	} finally {
	// 자원 반환
		fos.close();
		fis.close();
		br.close();
	} 
}

 

- 위와 같이 br, fis, fos 자원을 사용하고 finally 구문에서 반드시 close()를 해주어야 합니다.

 


#. try with Resources 문 사용방법

public void tryResources() throw IOException {
	String path = "c";
	String file = "test.txt";
	
    	// 자원 사용 및 자동 반환
	try(BufferedReader br = new BufferedReader(new FileReader(path)); 
		FileInputStream fis = new FileInputStream(file);
		FileOutputStream fos = new FileOutputStream(file)) {
          	파일 읽기, 쓰기에 관련한 로직 ;
	} catch (Exception e) {
		예외처리 ;
	}
}

 

- 이처럼 별도 finally 구문에 자원반환 선언을 하지 않아도 되기에 개발자가 신경 쓰지 않아도 됩니다.

 

- 정상적으로 처리가 완료되었거나 오류 발생으로 예외처리 되는 경우 모두 자원을 자동 반환합니다.

 

- 사소한 것으로 보이지만 신경 써야 할 것이 많은 개발자를 위해 이 사소한 것도 크게 작용할 수 있을 것 같습니다.

 

 

===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!
===========================================================

728x90