개발하는 두더지

[Effective Java 규칙7] 종료자 사용을 피해라 본문

Java,Android

[Effective Java 규칙7] 종료자 사용을 피해라

덜지 2018. 9. 4. 20:43

[Effective Java 규칙7] 종료자 사용을 피해라

Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.


책에 따르면 종료자는 예측 불가능하며, 대체로 위험하고, 일반적으로 불필요하다

자바에서의 종료자는 C++ 소멸자와는 다르다

C++에서 소멸자는 메모리 이외의 자원을 반환하는데도 사용되는데 자바에서는 보통 try finally 블록이 그런 용도로 쓴다

자바에서 어떤 객체에 대한 모든 참조가 사라지고 나서 종료자가 실행되기까지는 긴 시간이 걸릴 수 있으므로 긴급한 작업을 종료자 안에서 처리하면 안된다

예를들어, 종료자 안에서 파일을 닫는 행위는 치명적이다. 파일 디스크립터는 유한한 자원이기 때문이다

JVM은 종료자를 천천히 실행하므로 열린 상태의 파일이 많이 남아있을 수 있다. 이런 상황에서 새로운 파일을 열려고 하면, 한번에 열 수 있는 파일의 개수에 제한이 있으므로 오류가 발생한다.


종료자 실행시점은 GC 알고리즘에 좌우되는데, 이 알고리즘은 JVM에 따라 다르다. 

Comments