메모리 관련해서 NULL이 궁금해져서 Stack Memory에 관련해서 쫌 정리를 해봐야겠다.
그 전에 매개변수, 지역변수는 Stack에 저장된다고 한다. 그러면 계속 쌓일수록 메모리가 쌓여야 하는데
GC가 하지 않으면 StackOverflow나지 않나?
그에 대한 답은 힙 영역에서는 Garbage Collector가 작동하지만 스택 영역에서는 JVM내에서 스스로
메소드가 해제되면 매개변수와 지역 변수도 같이 해제 된다.
※ Integer, Double, Boolean, Character도 객체이므로 힙에서 GC에 의해 해제된다.
NULL
그럼 NULL이란 무엇인가?
예전엔 대충 그냥 없는 값, 데이터상 존재하지 않는 값이라고만 배웠다. 자세히 알아봐야겠다.
정답부터 말하자면 "참조하지 않는다는 것"이다.
위의 그림을 보면 objectTest(변수)는 Stack에 그것을 확인하는 ObjectTest1을 "참조"한다.
그렇다면 ObjectTest(변수)는 Stack에 있다. 그런데 참조하는 것이 없다.
그러므로 NULL은 "참조하지 않음"이란 뜻이다.
그렇다면 자료형의 기본형인 int, double, float에 대해서 알아봤다.
integer, double, float는 왜 NULL이 쓰일 수 없는가?
바로 기본형이기 때문이다. NULL에 대한 정의는 Heap에 있는 객체를 참조한다는 것이다.
그런데 기본형이 객체를 참조하면 문법적인 오류가 생긴다. 그러므로 아예 컴파일 에러를 내는 것이다.
'Java > 이론' 카테고리의 다른 글
getter(), setter() 쓰는 이유 (0) | 2024.07.06 |
---|---|
Inner Class (0) | 2024.07.06 |
[ static ], [ final ] (0) | 2024.07.05 |
[ 직렬화(serialize) ] [ 역직렬화(Deserialize) ] (0) | 2024.07.05 |
[ Java ] vs [ SQL ] (0) | 2024.07.05 |