본문 바로가기

Effective Java2

[이펙티브자바] Item 8. finalizer와 cleaner를 사용하지 마라 Finalizer와 Cleaner는 사용하지 마라 Class는 생성자(Constructor)와 소멸자(Destructor)라는 특별한 함수가 있다. 생성자는 익숙한 개념이지만 자바에서 소멸자를 직접 정의하는 일은 흔치 않기 때문에 익숙하지 않을 수 있는데, 그냥 생성자의 반대 개념이다. 객체가 소멸될 때 호출되는 함수이다. 자바는 두 가지 객체 소멸자 finalizer와 cleaner를 제공한다. 우선 결론부터 말하자면 finalizer는 쓰면 안된다. 언제 실행될지 예측할 수 없고 상황에 따라 사용하면 위험할 수 있다. 그래서 Java9에서는 deprecated되고 그 대안으로 cleaner가 새로 추가됐다. 그렇지만 cleaner도 finalizer보다는 덜 위험하지만 여전히 예측할 수 없고 일반적으.. 2021. 8. 12.
[이펙티브자바] Item 7. 다 쓴 객체의 참조를 해제하라 다 쓴 객체 참조를 해제하라 새삼스럽지만 자바는 가비지 컬렉터가 메모리 관리를 자동으로 해준다. 근데 이때문에 프로그래머가 메모리 관리에 더 이상 신경쓰지 않아도 된다고 오해할 수 있는데 그렇지 않다. 메모리 누수를 주의해야하는 케이스는 다음과 같은 것들이 있다. 클래스가 메모리를 직접 관리 아래의 코드에서는 메모리 누수가 일어난다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push.. 2021. 8. 12.