Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- DDL
- select_type
- static
- KEVISS
- lambda
- redis
- 바이너리 카운팅
- stream
- 테스트 코드
- 필드 주입
- hashcode
- 인덱스
- jpa
- jwt
- SQL
- 열 속성
- 재정의
- 생성자 주입
- cache
- equals
- DI
- Spring
- docker
- StringBuilder
- 조합
- AOP
- Test
- MSA
- java
- VUE
Archives
- Today
- Total
백엔드 개발자 블로그
[Effective Java] Item9. try-finally보다는 try-with-resources를 사용하라 본문
상황
InputStream, OutPutStream, java.sql.Connection과 같은 자원들은 사용 후에 close()메서드를 통해 자원을 회수 해줘야 합니다. 예측하기 어려운 성능 문제로 이어지기도 하기에 곡 close()를 해줘야 됩닌다.
try-finally 문제점
- try문과 finally 내에서 모두 예외가 발생하는 경우 디버깅이 어렵습니다.
- 코드가 지저분합니다.
- finally {br.close();} 코드를 작성할 작성 해줘야 됩니다.
- 1번 문제 해결을 위해 예외 설정 코드를 추가하게 되면 코드가 지저분해집니다.
static String firstLiseOfFile(String path) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}
try-with-resources로 해결
try-finally의 문제점은 자바 7에서 나온 try-with-resources를 통해 해결할 수 있습니다.
try-with-resources를 사용하면 try 문 외에서 발생한 예외는 "숨겨졌다.(suppressed)"라는 꼬리표를 달고 출력됩니다.
1. try-with-resources 를 사용하려면 AutoCloseable 인터페이스의 close() 함수를 구현해야합니다.
- 자바 라이브러리들은 이미 AutoCloseable를 구현하거나 되어 있어서 아래와 같이 바로 사용이 가능합니다.
- 구현이 안된 경우 AutoCloseable 인터페이스를 구현하면 됩니다.
2. try(자원 생성) {자원 사용 코드}
static String firstLiseOfFile(String path) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(path));) {
return br.readLine();
}
}
핵심정리
꼭 회수해야하는 자원을 다룰 때는 try-with-resources를 사용하도록 하자.
- 코드는 더 짧고 분명해진다.
- 만들어지는 예외 정보도 훨씬 유용하다.
'Java' 카테고리의 다른 글
[Effective Java] Item11. equals를 재정의하려거든 hashCode도 재정의하라 (0) | 2024.04.02 |
---|---|
[Effective Java] Item10. equals는 일반 규약을 지켜 재정의하라 (0) | 2024.04.02 |
[Effective Java] Item7. 다 쓴 객체 참조를 해체하라 (0) | 2024.03.22 |
[Effective Java] Item6. 불필요한 객체 생성을 피하라 (0) | 2024.03.22 |
[Effective Java] Item5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2024.03.21 |