Java 에서 배열이 null 인지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 배열이 null 인지 확인하는 방법을 배우게 됩니다. 먼저 NullPointerException을 방지하기 위해 배열 참조 자체가 null 인지 확인하는 방법을 이해하는 것으로 시작합니다.

그 다음, 보다 강력한 배열 처리를 위해 null 검사와 길이 검사를 결합하는 방법을 살펴봅니다. 마지막으로, 초기화된 빈 배열을 사용하여 이해도를 테스트합니다.

배열 참조가 null 인지 확인

이 단계에서는 Java 에서 배열 참조가 null인지 확인하는 방법을 배우겠습니다. null 확인은 일반적인 런타임 오류인 NullPointerException을 방지하기 위한 Java 프로그래밍의 기본 관행입니다.

NullPointerException은 아무것도 참조하지 않는 변수 (즉, null) 를 객체인 것처럼 사용하려고 할 때 발생합니다. 존재하지 않는 상자를 열려고 하는 것을 상상해 보세요. 이는 NullPointerException이 발생할 때 일어나는 일과 유사합니다.

null 배열 참조를 확인하는 방법을 보여주는 간단한 Java 프로그램을 만들어 보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다 (아직 열려 있지 않은 경우).

  2. 파일의 전체 내용을 다음 코드로 바꿉니다.

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = null; // 배열 참조를 선언하고 null 로 설정
    
            // 사용하기 전에 배열 참조가 null 인지 확인
            if (names == null) {
                System.out.println("The 'names' array is null.");
            } else {
                System.out.println("The 'names' array is not null.");
            }
        }
    }

    이 코드의 새로운 부분을 살펴보겠습니다.

    • String[] names = null;: 이 줄은 String 객체를 담을 수 있는 names라는 배열 변수를 선언합니다. 그런 다음 즉시 null 값을 할당합니다. 이는 names 변수가 현재 메모리에 있는 실제 배열 객체를 참조하지 않음을 의미합니다.
    • if (names == null): 이것은 프로그래밍에서 결정을 내리는 데 사용되는 if 문입니다. 괄호 안의 조건 (names == null) 이 참인지 확인합니다. == 연산자는 names 변수가 null과 같은지 비교하는 데 사용됩니다.
    • System.out.println("The 'names' array is null.");: 이 줄은 names == null 조건이 참일 경우에만 실행됩니다.
    • System.out.println("The 'names' array is not null.");: 이 줄은 names == null 조건이 거짓일 경우에만 실행됩니다 (즉, namesnull이 아님).
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 수정된 프로그램을 컴파일합니다. 터미널에서 다음을 실행합니다.

    javac HelloJava.java

    컴파일이 성공하면 아무런 출력도 표시되지 않습니다.

  5. 컴파일된 프로그램을 실행합니다.

    java HelloJava

    다음 출력이 표시되어야 합니다.

    The 'names' array is null.

    이 출력은 우리의 확인이 names 배열 참조를 null로 올바르게 식별했음을 확인합니다.

null을 확인하는 방법을 이해하는 것은 강력한 Java 코드를 작성하는 데 매우 중요합니다. 다음 단계에서는 null인 배열의 길이에 접근하려고 할 때 발생하는 일과 확인을 결합하는 방법을 살펴보겠습니다.

Null 및 길이 검사 결합

이전 단계에서는 배열 참조가 null인지 확인하는 방법을 배웠습니다. 이제 null 배열의 길이에 접근하려고 할 때 발생하는 일과 null 검사를 배열의 길이에 대한 검사와 결합하는 방법을 살펴보겠습니다.

null 배열 참조의 .length 속성에 접근하려고 하면 NullPointerException이 발생합니다. 이는 존재하지 않는 것의 속성에 접근하려고 하기 때문입니다.

이것을 보여주고 결합된 검사를 추가하기 위해 프로그램을 수정해 보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다.

  2. 파일의 전체 내용을 다음 코드로 바꿉니다.

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = null; // 배열 참조를 선언하고 null 로 설정
    
            // null 배열의 길이에 접근하려는 시도 (오류 발생)
            // int length = names.length; // 이 줄의 주석 처리를 해제하면 NullPointerException 이 발생합니다.
    
            // null 검사 및 길이 검사 결합
            if (names != null && names.length > 0) {
                System.out.println("The 'names' array is not null and has elements.");
            } else {
                System.out.println("The 'names' array is null or empty.");
            }
        }
    }

    다음은 새롭거나 변경된 내용입니다.

    • null 배열로 시작하기 위해 String[] names = null;을 유지했습니다.
    • 주석 처리된 줄 // int length = names.length;는 길이에 직접 접근하려고 할 때 발생하는 상황을 보여줍니다. 프로그램이 즉시 충돌하지 않도록 주석 처리했습니다.
    • if (names != null && names.length > 0): 이것은 결합된 검사입니다.
      • names != null: 이 부분은 names 배열 참조가 null아닌지 확인합니다.
      • &&: 이것은 논리 AND 연산자입니다. 전체 조건이 참이 되려면 &&의 양쪽에 있는 두 조건이 모두 참이어야 합니다.
      • names.length > 0: 이 부분은 names 배열의 길이가 0 보다 큰지 확인합니다. 이 검사는 첫 번째 부분 (names != null) 이 참인 경우에만 수행됩니다. Java 에서 && 연산자의 단락 회로 특성 덕분입니다. 이는 NullPointerException을 방지합니다.
    • else 블록은 이제 배열이 null이거나 비어 있음을 나타내는 메시지를 출력합니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 수정된 프로그램을 컴파일합니다.

    javac HelloJava.java

    다시 성공하면 출력이 없습니다.

  5. 컴파일된 프로그램을 실행합니다.

    java HelloJava

    다음 출력이 표시되어야 합니다.

    The 'names' array is null or empty.

    이 출력은 결합된 검사가 배열이 null이거나 비어 있음을 올바르게 식별했음을 보여줍니다. null로 초기화했으므로 if 조건의 첫 번째 부분 (names != null) 이 거짓이었고 else 블록이 실행되었습니다.

이와 같은 검사 결합은 Java 에서 배열 참조를 안전하게 처리하는 표준 방법으로, 길이와 같은 속성을 확인하거나 요소에 접근할 때 NullPointerException이 발생하지 않도록 합니다.

초기화된 빈 배열로 테스트

이전 단계에서는 null 배열 참조를 확인하고 이를 길이 검사와 결합하는 방법에 대해 배웠습니다. 결합된 검사가 null 배열을 올바르게 식별하는 것을 확인했습니다.

이제 null아니지만 비어 있는 (길이가 0 인) 배열로 결합된 검사를 테스트해 보겠습니다. 이는 또 다른 일반적인 시나리오입니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다.

  2. names 배열을 선언하고 초기화하는 줄을 수정합니다. String[] names = null;String[] names = new String[0];으로 변경합니다. 결합된 검사가 있는 if 문을 포함한 나머지 코드는 동일하게 유지되어야 합니다.

    업데이트된 코드는 다음과 같습니다.

    public class HelloJava {
        public static void main(String[] args) {
            String[] names = new String[0]; // 빈 배열 선언 및 초기화
    
            // null 검사 및 길이 검사 결합
            if (names != null && names.length > 0) {
                System.out.println("The 'names' array is not null and has elements.");
            } else {
                System.out.println("The 'names' array is null or empty.");
            }
        }
    }

    변경 사항은 다음과 같습니다.

    • String[] names = new String[0];: 이 줄은 이제 크기가 0 인 새로운 String 객체 배열을 생성합니다. 변수 names는 이제 메모리에 있는 실제 배열 객체를 참조하지만 해당 배열에는 요소가 없습니다. null아닙니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 수정된 프로그램을 컴파일합니다.

    javac HelloJava.java

    컴파일이 성공하면 출력이 없습니다.

  5. 컴파일된 프로그램을 실행합니다.

    java HelloJava

    다음 출력이 표시되어야 합니다.

    The 'names' array is null or empty.

    이 출력은 배열이 null이었을 때와 동일합니다. 그 이유를 이해해 보겠습니다. if 조건은 if (names != null && names.length > 0)입니다.

    • names != null: names가 빈 배열 객체를 참조하므로 이 부분은 이제 참입니다.
    • names.length > 0: 이 부분은 배열의 길이가 0 보다 큰지 확인합니다. 배열의 길이가 0 이므로 이 조건은 거짓입니다.
    • && 조건의 두 번째 부분이 거짓이므로 전체 조건 (names != null && names.length > 0)은 거짓으로 평가되고 else 블록이 실행됩니다.

이는 결합된 검사가 null 배열과 빈 배열을 모두 올바르게 식별함을 보여줍니다. 이는 요소가 포함된 경우에만 배열을 처리하려는 경우 원하는 동작인 경우가 많습니다.

요약

이 랩에서는 Java 에서 NullPointerException을 방지하기 위해 배열 참조가 null인지 확인하는 방법을 배웠습니다. if 문과 == 연산자를 사용하여 null 배열 참조를 확인하는 것을 보여주는 간단한 프로그램을 만드는 것으로 시작했습니다.

그런 다음 배열이 null이 아니지만 비어 있을 수 있는 경우를 처리하기 위해 null 검사를 길이 검사와 결합하는 방법을 살펴보았습니다. 마지막으로, null 배열 참조와 빈 배열의 차이점을 이해하기 위해 초기화된 빈 배열로 결합된 검사를 테스트했습니다.