Null과 NullPointerException

iy·2024년 1월 16일

Java

목록 보기
3/8

Null과 NullPointerException

: 참조 타입 변수는 아직 번지를 저장하고 있지 않다는 뜻으로 null(널)값을 가질 수 있다. null도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성된다.

String refVal1 = "자바";
String refVal2 = "null";

문자열 대입한 refVal1은 힙영역에 "자바"라는 문자를 갖는 String 객체를 만들고 번지를 스택영역에 저장함
refVal2 null을 지정했기 때문에 stack영역에 번지가 없는 체로 만들어진다.

참조 변수가 없는 상태에(즉, null일 때) 참조 변수가 할 수 있는 일은 없다. 참조 변수는 참조하고 있는 객체를 이용하기 때문에 객체가 없는 상태에서 이용하려고 하면 문제가 발생함

  • 참조 변수의 객체에 아무것도 없는 상태인 null일 때 해당 참조 변수를 사용하려고 하면 발생하는 Exception이 바로 NullPointerException!!
    - NullPointerException가 발생하면 참조 변수가 null인 상태라고 인식
String str = null; // 객체 없는 참조 변수 생성
System.out.println("총 문자 수 : " + str.length()); // NullPointerException 발생!

: str이라고 객체가 가지고 있는 메소드를 호출하려고 했는데 str은 객체를 참조하고 있지 않기 때문에 NullPointerException이 발생할 것이고 이 Exception이 발생하면 현재 null인 상태에 참조 변수를 사용하고 있으니 해당 변수에 정확히 객체를 참조하도록 번지를 대입해야 겠다고 생각하면 됨

String str = "abc";
int length = str.length();

사용하지 않는 객체 처리 방법

예전 하드웨어 사양이 좋지 않을 때 메모리가 넉넉하지 않았는데 메모리를 좀 더 효율적으로 사용해야 했다
자바는 직접적으로 메모리에 접근해 처리할 수 없기 때문에 간접적으로 표현을 해줘야 Garbage Collector를 실행시켜 메모리를 청소할 수 있었다.

  1. 사용했던 참조 변수에 강제적으로 null을 대입
    : 이렇게 하면 참조 변수에 번지를 잃게 됨
String str = "abc";
str = null;
  1. 선언한 참조 변수에 다른 객체 대입
    : 어떤 변수든 참조 하지 않는 객체는 후에 Garbage Collector가 청소함
String str = "abc";
str = "가나다";

// abc라는 번지를 참조했던 객체는 쓰레기 객체가 됨

이 방법들로 표현을 하면 해당 참조 변수가 어떤 값도 참조하지 않는다는 것을 알려줘 후에 GarbageCollector가 청소한다.

이것이자바다 강의
Oracle

0개의 댓글