자바 라이브러리에는 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 |