null과 NullPointerException

상곤·2024년 9월 20일

Java

목록 보기
4/22

null은 참조형 변수가 객체를 가리키지 않을 때 사용하는 특별한 값이다. NullPointerExceptionnull 상태의 객체에 접근할 때 발생하며, 이를 방지하기 위해선 변수의 null 상태를 항상 확인하고 적절히 초기화해야 한다.


1. null의 의미

null은 참조형 변수가 아직 어떤 객체도 참조하지 않거나, 객체를 참조할 준비가 되어 있지 않을 때 사용된다. 예를 들어, 객체를 생성하지 않고 변수를 선언하면 참조형 변수에는 자동으로 null 값이 들어간다.

Person person = null;  // 아직 어떤 객체도 참조하지 않음

변수 person은 null로 초기화되었기 때문에, 이 상태에서 해당 변수를 통해 객체에 접근하려고 하면 오류가 발생한다.


2. NullPointerException

null인 변수를 사용해 객체의 속성이나 메서드에 접근하려고 하면 자바에서 NullPointerException이 발생한다.
이는 프로그램 실행 중에 흔히 발생하는 예외 중 하나이다.

Person person = null;
person.age = 30;  // NullPointerException 발생
person이 null을 가리키고 있기 때문에, 객체에 접근하려고 시도하면 오류가 발생한다.

3. NullPointerException 방지

null 상태를 방지하기 위해서는 변수가 null인지 확인한 후에 접근하는 방법이 필요하다. 이를 null 체크라고 한다.

if (person != null) {
    person.age = 30;
} else {
    System.out.println("객체가 초기화되지 않았습니다.");
}

이렇게 하면 person이 null이 아닐 때만 객체에 접근한다.


4. null과 초기화

참조형 변수는 객체를 참조하기 전까지 기본적으로 null 값을 가진다. 하지만 null 상태로 객체에 접근하려고 하면 NullPointerException이 발생하므로, 객체를 적절히 초기화하는 것이 중요하다.

Person person = new Person();  // 객체를 초기화
person.age = 30;  // 이제 안전하게 객체에 접근 가능

5. GC와 null

null을 사용하여 더 이상 필요 없는 객체를 가리키지 않도록 만들면, 자바의 GC(Garbage Collector)가 해당 객체를 메모리에서 자동으로 제거한다. 이 과정을 통해 자바는 메모리 관리를 자동으로 처리한다.

Person person = new Person();
person = null;  // 더 이상 해당 객체를 참조하지 않음

person 변수에 null을 대입하면 이전에 생성된 Person 객체는 더 이상 참조되지 않으며, GC에 의해 메모리에서 제거될 수 있다.

6. NullPointerException 발생 예시 코드

다음은 NullPointerException이 발생할 수 있는 구체적인 예시이다.

// Data 클래스
class Data {
    int value; // 0으로 초기화
}

// BigData 클래스
class BigData {
    Data data; // null로 초기화(Data 객체를 참조하는 필드)
    int count; // 0으로 초기화
}

// 메인 클래스
public class NullExample {
    public static void main(String[] args) {
        BigData bigData = new BigData();
        bigData.data = new Data();  // Data 객체 초기화
        
        System.out.println("bigData.count=" + bigData.count);
        System.out.println("bigData.data=" + bigData.data);

        System.out.println("bigData.data.value=" + bigData.data.value);
    }
}

이 코드는 BigData 객체를 생성하고, 내부의 data 필드를 초기화한 후 값을 출력하는 예시이다. 이처럼 적절히 객체를 초기화해 사용하면 NullPointerException을 방지할 수 있다.

그러나 bigData.data = new Data(); 이 구문을 실행하지 않았다면, bigData.data는 여전히 null로 존재하기 때문에 NullPointerException이 발생했을 것이다.

null과 NullPointerException은 자바 프로그래밍에서 자주 발생하는 이슈이다.
변수가 null 상태인지 확인하고 적절히 초기화하는 습관을 들이면 이러한 예외를 방지할 수 있다.

profile
🫠

0개의 댓글