'자바 Basic/자바언어의핵심'에 해당되는 글 14건

  1. 2007.11.30 자바공부-12.객체의 존재영역
프로그램에서 만들어진 모든 객체는 프로그램에서 살아가는 동안 삶의 길이가 정해져

있습니다. 어떤 객체는 프로그램이 살아 있는 동안 꿋꿋이 살아 남는가 하면

어떤 객체는 간단한 조건문이나 반복문을 마치면 삶이 끝나는 객체가 있습니다.

자바에서 객체나 변수의 삶의 길이는 기본적으로 블록 단위 { , }로 좌우됩니다.

예제 1 - 17은 블록단위에서 레퍼런스(혹은 변수) supply, d , z 를 읽고,쓸수 있는 영역을

보여주고 있습니다.

 

 

             {

                           int supply = 120;                 // 바깥쪽 블록영역에서는 supply,d를 읽고,쓸수 있습니다.

                           Dragoon d = null;

                           if ( supply < 200) { // 안쪽 블록영역에서는 supply,d,z를 읽고,쓸수 있습니다.

                                        Zealot z = new Zealot();

                                        d = new Dragoon();

                           }

// 바깥쪽 블록영역에서는 supply,d를 읽고,쓸수 있습니다.

             }

예제 1 - 17

 

Zealot형 레퍼런스 z는 안쪽의 { , } 블록 안에서 선언 되었기 때문에 그 블록 안에서만

존재할 수 있습니다. 그 블록을 벗어나게 되면 z는 영역을 벗어나게 되고 만들어진

질럿 객체를 더 이상 참조할 수 없게 됩니다.

Dragoon d는 바깥쪽의 {, }블록에서 선언 되었기 때문에 존재할 수 있는 영역은 안쪽 블록,

바깥쪽 블록 모두에서 참조할 수 있습니다.

 

Zealot z가 안쪽 블록을 벗어나는 순간 레퍼런스 z는 존재하지 않게 됩니다.

이 사건과 동시에 레퍼런스 z와 결합하고 있는 질럿 객체는 프로그램에서 더 이상 참조할

수 있는 방법이 없기 때문에 만들어진 질럿 객체는 프로그램에서 메모리만 낭비하고 있는

쓸데 없는 객체가 되버립니다. 자바에서는 이런 객체,즉 더 이상 레퍼런스가 존재하지 않는

객체를 모두 모아 없애버리고 메모리를 확보하는 자동 메커니즘이 있습니다.

이를 가비지 컬렉션(Garbage Collection) 이라고 합니다.

하지만 이런 가비지 컬렉션이 언제 일어나는 지에 대해선 프로그래머는 알 수가 없고,

자바 버추얼머신의 판단에 전적으로 좌우됩니다. 물론 알아서 잘 해줍니다.

Posted by
,