Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)의 null에 대해 알아두면 좋은 흥미로운 사실들

자바(Java)에서 null이 동작하는 방식

자바에는 null과 관련된 여러 가지 중요한 규칙과 특성이 있습니다. 이 글에서는 실제 예제 코드와 함께 자바 개발자라면 반드시 알아야 할 null의 핵심 특징들을 하나씩 살펴보겠습니다.

1. 참조 변수의 기본값은 항상 null이다

자바에서 모든 참조형(reference) 변수는 명시적으로 초기화하지 않으면 기본값으로 null을 갖습니다. 아래 예제를 통해 확인해 보겠습니다.

예제 코드

public class Demo {
    private static Object my_obj;
    public static void main(String args[]) {
        System.out.println("객체 my_obj의 기본값 : " + my_obj);
    }
}

실행 결과

객체 my_obj의 기본값 : null

Demo라는 클래스 안에 정적(static) 객체를 선언하고, main 메서드에서 이 객체를 출력하도록 구성했습니다. 초기화 코드가 전혀 없음에도 불구하고 결과 값이 null로 출력되는 것을 확인할 수 있습니다. 이는 멤버 변수가 JVM에 의해 자동으로 null로 초기화되기 때문입니다.

2. '=='와 '!=' 연산자를 null과 함께 사용할 수 있다

null은 비교 연산자인 ==(같음)와 !=(다름)와 함께 사용할 수 있습니다. 두 null 값을 서로 비교하면 어떤 결과가 나오는지 살펴보겠습니다.

예제 코드

public class Demo {
    public static void main(String args[]) {
        System.out.println("null == null 의 결과 :");
        System.out.println(null == null);
        System.out.println("null != null 의 결과 :");
        System.out.println(null != null);
    }
}

실행 결과

null == null 의 결과 :
true
null != null 의 결과 :
false

Demo 클래스의 main 메서드에서 == 연산자로 두 null 값을 비교한 결과는 true, != 연산자로 비교한 결과는 false가 출력됩니다. 즉, null끼리는 서로 같은 값으로 취급된다는 것을 알 수 있습니다. 이 성질은 실무에서 객체가 비어 있는지 검사할 때 매우 유용하게 활용됩니다.

3. null 키워드는 대소문자를 구분한다

자바에서 null은 예약어(reserved keyword)이며, 반드시 소문자로 작성해야 합니다. NULL 또는 Null처럼 대문자나 혼합해서 쓰면 컴파일 오류가 발생합니다.

예제 코드

public class Demo {
    public static void main(String[] args) throws java.lang.Exception {
        Object my_obj_1 = NULL;
        Object my_obj_2 = null;
    }
}

컴파일 오류 출력

/Demo.java:5: error: cannot find symbol
Object my_obj_1 = NULL;
^
symbol:   variable NULL
location: class Demo
1 error

NULL이라고 잘못 작성하자 컴파일러가 "cannot find symbol" 오류를 발생시킵니다. 자바 컴파일러는 NULL이라는 이름의 변수나 상수를 찾지 못하기 때문입니다. C 언어 계열에 익숙한 개발자들이 자주 실수하는 부분이므로 주의가 필요합니다.

추가로 알아두면 좋은 null 관련 지식

  • 원시 타입에는 null을 할당할 수 없습니다. int, char, boolean 등의 원시(primitive) 타입 변수에 null을 대입하려 하면 컴파일 오류가 발생합니다. null은 오직 참조형 타입에만 사용할 수 있습니다.
  • instanceof 연산자에서 null은 항상 false를 반환합니다. 어떤 클래스든 null instanceof Object의 결과는 false입니다.
  • null은 모든 참조 타입에 공통적으로 할당 가능합니다. String, Integer, 사용자 정의 클래스 등 어떤 참조형 변수에도 null을 대입할 수 있습니다.

마무리

지금까지 자바에서 null의 세 가지 핵심 특징, 즉 참조 변수의 기본값, 비교 연산자와의 호환성, 그리고 대소문자 구분에 대해 알아보았습니다. null의 동작 방식을 정확히 이해하면 NullPointerException 같은 런타임 오류를 예방하고 더 견고한 코드를 작성하는 데 큰 도움이 됩니다.