JAVA의 가장 기본이 되는 내용

Null / GC (Garbage Collection)

cwchoiit 2024. 3. 25. 19:51
728x90
반응형
SMALL

Null

우선 자바에서 null은 참조형 변수에만 사용할 수 있다. 참조형 변수는 메모리 상 주소(참조값)를 가지고 있는데 이 주소가 가리키는 곳 내부에 인스턴스, 배열 등등의 참조형 변수의 실체가 존재한다. 이 때 가리키는 대상이 없거나, 지금 당장 필요한게 아니라 이후에 가리키는 대상을 지정하고 싶을 때 null을 사용한다. 

 

참조형 변수에 null을 대입하는 것은 간단하게 다음과 같이 할 수 있다.

Student s = null;

 

그런데 만약, 이렇게 값도 없이 계속 쓰레기 데이터만 쌓이면 메모리는 감당할 수 있을까? 이를 해결하기 위해 자바는 GC라는 가비지 컬렉션을 제공한다.

GC (Garbage Collection)

자바는 JVM내 가비지 컬렉션이라는 녀석을 제공한다. 이 녀석이 하는 일은 더이상 그 무엇도 참조하고 있지 않는 객체를 메모리상에서 우리 대신 지워주는 역할을 한다. 아주 고마운 녀석이다. 어떤 객체가 있고 그 객체에 null을 대입했을 때 더이상 그 누구도 해당 객체를 참조하지 않는 상태라면 이 객체도 가비지에 해당하고 지역변수로 사용되는 변수가 다 쓰고 더 이상 사용되지 않을 때 이 또한 가비지에 해당한다. 그리고 이런 작업을 C언어에서는 개발자가 직접 메모리에서 삭제하는 코드를 작성해서 수행했다. 그런거보면 자바는 이를 대신해주니 엄청 고마운 녀석이라고 할 수 있겠다. 

 

 

그러면 이러한 의문이 들 수 있다. 그럼 가비지 컬렉션 말고 그냥 사용하고 바로 개발자가 없애는게 더 메모리 공간에 대해 효율적이 아닐까? 정답은 아니라고 볼 수 있다. 어떤 느낌으로 생각하면 좋냐면 데이터베이스에 READ 쿼리를 계속 수시로 하나씩 날리는 것과 한꺼번에 여러개에 대한 쿼리를 딱 한번 수행하는 느낌으로 생각하면 좋은 예시가 될 것 같다. 효율을 따지자면 가비지 컬렉션이 훨씬 더 좋을 수도 있다. 그리고 가비지 컬렉션 만드는 사람들은 진짜 엘리트들이다. 

728x90
반응형
LIST