조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다.
1. 소멸자 사용 피하기
Finalizer
- 자바에서 객체가 더이상 필요하지 않을 때 정리 작업을 수행하는 매커니즘
- 권장되지 않음
예측 불가
- GC가 객체를 회수한 후에만 실행됨
- 실행 시점이나 실행 여부를 보장할 수 없음
- GC 알고리즘에 따라 실행 타이밍이 달라질 수 있음
성능 문제
- 추가적인 처리 비용 발생
대체 방안 존재
- 명시적인 종료 메서드
- try-with-resources 구문
2. Try-With-Resources
try (
InputStream in = new FileInputStream("input.txt");
OutputStream out = new FileOutputStream("output.txt")
) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
자동 자원 해제
- AutoCloseable 인터페이스를 구현한 객체는 블록이 끝날 떄 자동으로 닫힘
- 명시적으로 자원을 닫을 필요 없음
예외 처리 개선
- 모든 예외를 추적
- 숨겨진 예외를 suppressed로 표시됨
명시적으로 예외 처리 가능
static String readFirstLine(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
} catch (IOException e) {
return "Default Value";
}
}
'Java' 카테고리의 다른 글
[Effective Java] 4-1. 클래스와 인터페이스: 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2024.12.27 |
---|---|
[Effective Java] 3. 모든 객체의 공통 메서드 (0) | 2024.12.27 |
[Effective Java] 2-7. 객체 생성과 파괴: 다 쓴 객체의 참조를 해제하라 (0) | 2024.12.27 |
[Effective Java] 2-6. 객체 생성과 파괴: 불필요한 객체 생성을 피하라 (0) | 2024.12.27 |
[Effective Java] 2-5. 객체 생성과 파괴: 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (2) | 2024.12.27 |