Null이란?
흔히 코딩을 하다 보면 Null이란 값이 존재(?)하는데(존재한다는 표현이 맞지는 않을 수 있으나, 편의상 사용) 이 Null 이란 뭘까?
쉽게 카카오톡 선물하기를 떠올리면 된다.
친구에게 선물을 하면 구매는 되었지만 배송지가 아직 입력되지 않아 특정기간(자동환불 되는 기간)동안은 주소지를 비워두는 것을 말한다.
이 때 이 비워두는 것을 Null이라고 한다.
기본적으로 기본형(int , double, long, boolean)의 경우 자동으로 "0"과 "false"로 값이 초기화가 되지만, 참조형의 경우
(ex : int[] students) 데이터에 접근하기 위한 주소를 저장하는 데이터 타입이기 때문에 주소지를 지정하지 않는다면 임의로 Null을 넣어두게 되며 이 때 NullPointException이 쉽게 발생한다.
NullPointException이란?
그럼 어떤 과정을 통해 NullPointException이 발생할까?
위에서 Null에 대해 얘기하면서 우리는 참조형(Object)변수를 지정하지 않을 경우 null이 들어가게 되는 것을 알게됐다.

다음과 같이 BigData라는 클래스가 존재한다고 했을 때 count의 경우 기본형이기 때문에 count = 0으로, 참조형인 data는 null로 초기화가 된다.
이후 다른 클래스에서 다음과 같이 호출을 할 경우

주석에서 설명된 것과 같이 count에 대해 호출을 할 경우

다음과 같이 초기화 된 값인 0이 출력되게 되고, 그 다음 줄인 data를 출력하는 코드에선

다음과 같이 초기화 된 상태인 Null이 들어가게 된다.
그런데 그 다음줄을 보게 되면 bigData.data.value라는 주소지의 데이터 값을 호출하게 되는데.
3번째 줄의 코드의 결과 값을 통해 "bigData.data = null"이란 것을 알 수 있고, 이렇게 되면 주소는 bigData.null.value로 인식하게 된다.
이 때 주소지가 존재하지 않으므로 NullPointException이 발생하게 된다.

마무리
김영한 강사님의 강의를 들을 때 마다 너무나도 새롭고, 현재는 스택과 큐에 대해서 배우면서 같이 학원 다녔던 사람들과 토이프로젝트를 진행하는데, 이럴 때 마다 신경쓸게 너무나도 많고(학원에선 도대체가 뭘 배운지 모르겠음. 학원은 무조건 잘 알아보고 가는게 답.)그걸 하나하나 생각하며 하기엔 블로깅이 답인 것 같다..
'Java' 카테고리의 다른 글
| [Java] reverse() (1) | 2024.11.13 |
|---|---|
| [Java] Thread Join (2) | 2024.11.12 |
| [Java] Record (4) | 2024.11.11 |
| [Java] Linear Search AND Binary Search (2) | 2024.09.03 |
| [Java] "float" vs "double" in precision (4) | 2024.08.31 |
