오래된 공공 기관에서 일하다 보면 try-with-finally가 대부분 많다. 큰 문제점을 파악하지 못 했는데 왜 try-with-resource를 쓰라고 하는걸까?
Java7 이전의 try-catch-finally
사용 후에 반납해주어야 하는 자원들은 close를 호출하기 위해서 Null검사와 함께 직접 호출했어야 했다.
→ 이러한 점이 문제점을 야기한다.
● 자원 반납에 의해 코드가 복잡해짐
● 실수로 자원을 반납하지 못하는 경우 발생한다.
● 에러로 자원을 반납하지 못하는 경우 발생
● 에러 스택 트레이스가 누락되어 디버깅이 어렵다.
Java7 이후의 try-with-resource
java는 이러한 문제점을 해결하고자 Java7부터 자원을 자동으로 반납해주는 try-catch-resources 문법을 추가했다.

# 밑에 그림 공통적으로 적용되는 코드
1) 에러 자원 반납 못하는 경우

만약 mr1.close()를 통해서 강제 IllegalStateException을 내리게 되면 mr2의 리소스는 해제되지 못하는 것이다.
but try-catch-resource를 하면 해당 클래스의 자원을 모두 해제한다.
2) 에러 스택 트레이스가 누락되어 디버깅이 어려운 경우

이럴 경우에도 mr.test()에 대한 스택트레이스가 mr.test()와 mr.close()에도 스택 트레이스가 찍혀야 하지만
결과적으로 mr.close()에 대한 에러 스택트레이스만 찍힌다. but try-catch-resource를 하면 해당 클래스의
에러 스택 트레이스 모두 찍힌다.
'Spring_SpringBoot > 이론' 카테고리의 다른 글
| [ System.out.println() ] VS [ logger.XXX ] (0) | 2024.06.11 |
|---|---|
| @RequestMapping, @GetMapping, @PostMapping (0) | 2024.06.11 |
| SpringBoot 의존성 관리 (0) | 2024.06.03 |
| RestController/Controller (0) | 2024.06.03 |
| 스프링부트의 ComponentScan Bean이해 (0) | 2024.06.03 |