Before. try~finally 자바 라이브러리에는 close 메서드를 호출하여 직접 닫아줘야하는 자원이 많다. 전통적으로 자원을 제대로 닫힘을 보장하는 수단으로 try~finally가 쓰였다. 더이상 자원을 회수하는 최선의 방책이 아니다. public class TopLine { // 코드 9-1 try-finally - 더 이상 자원을 회수하는 최선의 방책이 아니다! (47쪽) static String firstLineOfFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } }..
finalizer, cleaner 사용을 피하라 자바는 finalizer, cleaner이라는 두가지 객체 소멸자를 제공한다. 결론을 미리 말하자면, finalizer, cleaner 사용은 피해야한다. 두 객체 모두 즉시 수행된다는 보장이 없다. 객체에 접근할 수 없게 된 후 finalizer나 cleaner가 실행되기까지 얼마나 걸릴지는 알 수 없다. 때문에 제때 실행되어야 하는 작업은 절대 할 수 없다. finalizer, cleaner를 얼마나 신속하게 수행할지는 전적으로 가비지 컬렉터 알고리즘에 달렸으며, 이는 가비지 컬렉터 구현마다 각기 다르다. finalizer 구현 예제 finalizer 구현예제 public class FinalizerIsBad { @Override protected vo..