본문 바로가기

개발/JAVA

try-with-resources

자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다.

- 자원 닫기는 놓치기 쉬워 예측할 수 없는 성능 문제로 이어진다.

- 이런 자원들이 finalizer를 활용하고 있지만 finalizer는 안전하지 않다.

- 보통 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다.

 

 

여러자원일 경우 코드가 지저분해진다.

첫번째 예외인지 두번째 예외인지 알수가 없어 디버깅이 어렵다.

 

 

try-with-resources

 

- try()에 선언된 객체들에 대해서 try가 종료될 때 자동으로 자원을 해제해 주는 기능이다.

- try에서 선언된 객체가 AutoCloseable을 구현했다면 try 구문이 종료될 때 객체의 close() 메서드를 호출해 준다.

- 위의 문제들은 try-with-resources로 해결 가능하다.

- 이 구조를 사용하려면 해당 자원이 AutoCloseable 인터페이스를 구현해야 한다.

- 닫아야 하는 자원을 뜻하는 클래스를 작성한다면 AutoCloseable를 반드시 구현하자.

 

- try-with-resources 버전이 짧고 읽기 쉽고 문제를 진단하기 쉽다.

- firstLineOfFile 메서드를 생각해 보면 readLine과 close 호출 양쪽에서 예외가 발생하면

close에서 발생한 예외는 숨겨지고 readLine에서 발생한 예외가 기록된다.

- 실전에서는 보여줄 예외 하나만 보존되고 여러 개의 다른 예외가 숨겨질 수도 있다.

- 숨겨진 예외들도 그냥 버려지지는 않고, 스택 추적 내역에 숨겨졌다는 꼬리표를 달고 출력된다.

 

 

 

catch절도 사용가능 하다.

'개발 > JAVA' 카테고리의 다른 글

String 클래스  (0) 2022.08.28
Object 클래스-미완/////  (0) 2022.08.21
JAVA 예외발생시키기  (0) 2022.08.20
JAVA 예외처리  (0) 2022.08.18
[JAVA]인터페이스  (0) 2022.08.14