[JAVA]

try-catch-finally 말고 try-with-resources 사용법

hatch 2023. 6. 10. 14:36
728x90
반응형
💡 배경
 - JSP 공부 중 예제 문제에 try-catch문인데 이상하게 생긴 것 발견.
 - 챗 GPT에게 물어보니 해당 문법은 try-with-resources 라고 답변.
 - try-with-resources, 찾아보니 try-catch보다 더 좋잖아! 싶어서 기록함.

 

try-with-resources란?
  • try-catch를 개선한 Java7부터 도입된 문법.
  • 특징 : catch 블록 없이도 자동으로 예외처리 → 자원의 안전한 해제, 예외처리 간편화.

 

1. 문법 형태

 a. try-catch-finally

FileInputStream is = null;
try {
	is = new FileInputStream("file.txt");
    ...
} catch (Exception e) {
	e.printStackTrace(); //예외처리
} finally {
	//close 메소드 호출
	if (is != null) is.close();
}

사용 후 반납해줘야 하는 자원의 경우 Closable 인터페이스를 구현하고 있음. → 사용 후 Close 메소드 호출 필수.

Java7 이전에는 try-catch-finally를 통해 직접 호출해야 했음.

 

이런 작업은 다음과 같은 단점이 있다.

  • 작업이 번거롭고
  • 코드가 복잡하며,
  • 실수 혹은에러로 자원을 반납하지 못하는 경우가 발생할 수 있음.

 

 b. try-with-resources

try (FileInputStream is = new FileInputStream("file.txt")) {
        int data;
		..
   }

try () → 괄호 안에 자원을 선언함. 2개 이상일 경우 ; 로 구분.

선언된 자원은 try 블록이 실행되는 동안 사용되고, 벗어나면 자동 해제.

 

(조건) AutoCloseable 인터페이스를 구현하는 자원만 적용 가능.

😂 재미있는 사실은, 기존의 Closeable에 부모 인터페이스로 AutoCloseable을 추가했다는 점이다.

(다시 말해 기존 클래스들, 하위 호환 100% 라는 것)

 

 

2. try-with-resources를 사용할 때의 장점?

앞에서 얘기한 try-catch의 단점을 다 보완했다고 보면 된다.

  • 번거로운 작업을 안해도 되고
  • 코드가 간결해지며
  • 실수 혹은에러로 자원을 반납하지 못하는 경우 방지.
  • 모든 에러에 대한 스택 트레이스도 남길 수 있다.

 

 

[참고] https://mangkyu.tistory.com/21