diff --git a/effective-java/item7.md b/effective-java/item7.md index 819c73c..d0823fe 100644 --- a/effective-java/item7.md +++ b/effective-java/item7.md @@ -63,7 +63,7 @@ public class Stack { 그렇다고 필요없는 객체를 볼 떄 마다 `null`로 설정하는 코드를 작성하지는 말자. **객체를 Null로 설정하는 건 예외적인 상황에서나 하는것이지 평범한 일이 아니다.** 필요없는 객체 레퍼런스를 정리하는 최선책은 그 레퍼런스를 가리키는 변수를 특정한 범위(스코프) 안에서만 사용하는 것이다. (로컬 변수는 그 영역 넘어가면 쓸모 없어져서 정리되니까요.) 변수를 가능한 가장 최소의 스콥으로 사용하면 자연스럽게 그렇게 될 것이다. (하지만 위에 코드처럼 size라는 멤버 변수와 elements를 쓰는 경우엔 역시 자연스럽게 그렇게 되진 않으니까.. 즉 예외적인 상황이라 그래서 명시적으로 null로 설정하는 코드를 써줘야 했던 겁니다.) -그럼 언제 레퍼런스를 `null`로 설정해야 하는가? **메모리를 직접 관리 할 때.** `Stack` 구현체ㅓ럼 `elements`라는 배열을 관리하는 경우에 GC는 어떤 객체가 필요없는 객체인지 알 수 없다. 오직 프로그래머만 `elements`에서 가용한 부분 (size 보다 작은 부분)과 필요없는 부분 (size 보다 큰 부분)을 알 수 있다. 따라서, 프로그래머가 해당 레퍼런스를 null로 만들어서 GC한테 필요없는 객체들이라고 알려줘야 한다. +그럼 언제 레퍼런스를 `null`로 설정해야 하는가? **메모리를 직접 관리 할 때.** `Stack` 구현체처럼 `elements`라는 배열을 관리하는 경우에 GC는 어떤 객체가 필요없는 객체인지 알 수 없다. 오직 프로그래머만 `elements`에서 가용한 부분 (size 보다 작은 부분)과 필요없는 부분 (size 보다 큰 부분)을 알 수 있다. 따라서, 프로그래머가 해당 레퍼런스를 null로 만들어서 GC한테 필요없는 객체들이라고 알려줘야 한다. **메모리를 직접 관리하는 클래스는 프로그래머가 메모리 누수를 조심해야 한다.**