Java 변수 초기화 여부 확인 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 변수가 초기화되었는지 확인하는 방법을 배우게 됩니다. NullPointerException과 같은 일반적인 오류를 방지하는 데 필수적인 다양한 데이터 유형에 대한 null 및 기본값을 식별하는 방법을 살펴보겠습니다.

실습 예제를 통해 null을 확인하고 기본형 (primitive) 및 객체형 (object type) 에 할당된 기본값을 이해하는 연습을 할 것입니다. 또한 Java 프로그램이 견고하고 오류가 없도록 클래스 내에서 초기화되지 않은 필드를 처리하는 방법도 배우게 됩니다.

Null 또는 기본값 확인

이 단계에서는 Java 에서 null 또는 기본값을 확인하는 방법을 살펴보겠습니다. NullPointerException과 같은 오류를 방지하기 위해 Java 프로그래밍에서 null을 처리하는 방법을 이해하는 것이 중요합니다. 기본값은 명시적으로 초기화되지 않은 경우 변수에 할당되므로 아는 것도 중요합니다.

Java 에서 기본 데이터 유형 (예: int, boolean, double 등) 에는 기본값이 있는 반면, 객체 유형 (예: String, 배열, 사용자 정의 클래스) 에는 기본값 null이 있습니다.

null을 확인하고 기본값을 이해하기 위해 간단한 Java 프로그램을 만들어 보겠습니다.

  1. WebIDE 편집기에서 HelloJava.java 파일을 엽니다. 이전 랩을 완료했다면 이 파일은 이미 ~/project 디렉토리에 존재해야 합니다.

  2. HelloJava.java의 기존 코드를 다음으로 바꿉니다.

    public class HelloJava {
    
        static int defaultInt;
        static boolean defaultBoolean;
        static String defaultString;
    
        public static void main(String[] args) {
            System.out.println("Default int value: " + defaultInt);
            System.out.println("Default boolean value: " + defaultBoolean);
            System.out.println("Default String value: " + defaultString);
    
            String myString = null;
            System.out.println("My string value: " + myString);
    
            // Example of checking for null
            if (myString == null) {
                System.out.println("My string is null.");
            } else {
                System.out.println("My string is not null.");
            }
        }
    }

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

    • static int defaultInt;: defaultInt라는 정적 정수 변수를 초기화하지 않고 선언합니다. 기본형 (primitive type) 의 정적 변수이므로 기본값이 할당됩니다.
    • static boolean defaultBoolean;: 마찬가지로 defaultBoolean이라는 정적 부울 변수가 선언되고 기본값을 얻습니다.
    • static String defaultString;: defaultString이라는 정적 String 변수가 선언됩니다. String은 객체 유형이므로 기본값은 null이 됩니다.
    • System.out.println("Default int value: " + defaultInt);: 이 줄은 정수의 기본값을 출력합니다.
    • System.out.println("Default boolean value: " + defaultBoolean);: 이 줄은 부울의 기본값을 출력합니다.
    • System.out.println("Default String value: " + defaultString);: 이 줄은 String 의 기본값을 출력합니다.
    • String myString = null;: myString이라는 String 변수를 명시적으로 선언하고 값 null을 할당합니다.
    • System.out.println("My string value: " + myString);: 이 줄은 myString의 값을 출력합니다.
    • if (myString == null): 이것은 myString 변수가 null과 같은지 확인하는 if 문입니다. 이것은 객체 참조가 아무것도 가리키지 않는지 확인하는 표준 방법입니다.
  3. HelloJava.java 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 터미널에서 프로그램을 컴파일합니다.

    javac HelloJava.java

    오류가 없으면 HelloJava.class 파일이 업데이트됩니다.

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

    java HelloJava

    다음과 유사한 출력을 볼 수 있습니다.

    Default int value: 0
    Default boolean value: false
    Default String value: null
    My string value: null
    My string is null.

    이 출력은 int(0), boolean(false) 및 String(null) 의 기본값을 보여줍니다. 또한 myString 변수가 실제로 null이고 if 조건이 이를 올바르게 식별했음을 확인합니다.

null 및 기본값을 이해하는 것은 견고한 Java 코드를 작성하는 기본적인 단계입니다. 다음 단계에서는 다양한 데이터 유형으로 테스트하는 방법을 살펴보겠습니다.

다양한 데이터 유형으로 테스트

이 단계에서는 다양한 데이터 유형으로 작업하여 Java 에 대한 이해를 넓혀보겠습니다. Java 에는 숫자, 텍스트 및 true/false 값과 같은 다양한 종류의 정보를 저장하기 위한 다양한 데이터 유형이 있습니다.

Java 에는 두 가지 주요 범주의 데이터 유형이 있습니다.

  1. 기본 데이터 유형 (Primitive Data Types): 이것은 간단한 값을 저장하는 기본 데이터 유형입니다. 예로는 int(정수), double(소수), boolean(true/false), char(단일 문자) 등이 있습니다.
  2. 참조 데이터 유형 (Reference Data Types): 이것은 객체를 참조하는 데이터 유형입니다. 예로는 String, 배열 및 직접 생성하는 클래스가 있습니다.

HelloJava.java 프로그램을 수정하여 다양한 데이터 유형을 사용하고 표시해 보겠습니다.

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

  2. 기존 코드를 다음으로 바꿉니다.

    public class HelloJava {
    
        public static void main(String[] args) {
            // Primitive Data Types
            int age = 30;
            double price = 19.99;
            boolean isJavaFun = true;
            char initial = 'J';
    
            System.out.println("Age: " + age);
            System.out.println("Price: " + price);
            System.out.println("Is Java fun? " + isJavaFun);
            System.out.println("Initial: " + initial);
    
            // Reference Data Type (String)
            String greeting = "Hello, LabEx!";
            System.out.println("Greeting: " + greeting);
    
            // Reference Data Type (Array)
            int[] numbers = {1, 2, 3, 4, 5};
            System.out.print("Numbers: ");
            for (int i = 0; i < numbers.length; i++) {
                System.out.print(numbers[i] + " ");
            }
            System.out.println(); // Print a newline at the end
        }
    }

    새로운 변수와 코드를 살펴보겠습니다.

    • int age = 30;: 정수 변수 age를 선언하고 값 30 을 할당합니다.
    • double price = 19.99;: double 변수 price를 선언하고 값 19.99 를 할당합니다.
    • boolean isJavaFun = true;: 부울 변수 isJavaFun을 선언하고 값 true를 할당합니다.
    • char initial = 'J';: 문자 변수 initial을 선언하고 문자 'J'를 할당합니다. 문자는 작은 따옴표를 사용합니다.
    • String greeting = "Hello, LabEx!";: String 변수 greeting을 선언하고 텍스트 값을 할당합니다. String 은 큰 따옴표를 사용합니다.
    • int[] numbers = {1, 2, 3, 4, 5};: numbers라는 정수 배열을 선언하고 값으로 초기화합니다. 배열은 동일한 데이터 유형의 요소 모음입니다.
    • for 루프는 numbers 배열을 반복하고 각 요소를 출력합니다.
  3. HelloJava.java 파일을 저장합니다.

  4. 터미널에서 프로그램을 컴파일합니다.

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

    java HelloJava

    다음과 유사한 출력을 볼 수 있습니다.

    Age: 30
    Price: 19.99
    Is Java fun? true
    Initial: J
    Greeting: Hello, LabEx!
    Numbers: 1 2 3 4 5

    이 출력은 Java 가 다양한 기본 및 참조 데이터 유형을 처리하고 표시하는 방법을 보여줍니다. 각 변수가 해당 유형에 따라 할당된 값을 저장하고 출력하는 것을 볼 수 있습니다.

이 단계에서는 Java 에서 다양한 데이터 유형을 선언하고 사용하는 연습을 했습니다. 데이터 유형을 이해하는 것은 프로그램에서 정보를 저장하고 조작하는 데 필수적입니다. 다음 단계에서는 초기화되지 않은 필드를 처리하는 방법을 살펴보겠습니다.

초기화되지 않은 필드 처리

이 단계에서는 Java 가 명시적으로 초기화되지 않은 필드 (클래스 내의 변수) 를 처리하는 방법을 이해하는 데 중점을 둡니다. 이는 이전의 기본값에 대한 논의를 기반으로 합니다.

Java 에서 인스턴스 변수 (클래스 객체에 속하는 필드) 와 정적 변수 (클래스 자체에 속하는 필드) 는 선언 시 초기화되지 않은 경우 자동으로 기본값이 할당됩니다. 그러나 지역 변수 (메서드 내에서 선언된 변수) 는 기본값을 얻지 않으며 사용하기 전에 명시적으로 초기화해야 합니다.

이 개념을 보여주기 위해 새 클래스를 만들어 보겠습니다.

  1. 왼쪽 WebIDE 파일 탐색기에서 ~/project 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 "새 파일"을 선택한 다음 FieldExample.java를 입력합니다.

  2. 편집기에서 FieldExample.java 파일을 열고 다음 코드를 추가합니다.

    public class FieldExample {
    
        // Instance variables (fields) - automatically get default values
        int instanceInt;
        String instanceString;
        boolean instanceBoolean;
    
        // Static variables (fields) - automatically get default values
        static double staticDouble;
        static char staticChar;
    
        public static void main(String[] args) {
            // Local variables - must be initialized before use
            int localInt;
            // String localString; // If uncommented and used without init, would cause a compile error
    
            // Creating an object of FieldExample to access instance variables
            FieldExample obj = new FieldExample();
    
            System.out.println("Instance int: " + obj.instanceInt);
            System.out.println("Instance String: " + obj.instanceString);
            System.out.println("Instance boolean: " + obj.instanceBoolean);
    
            System.out.println("Static double: " + staticDouble);
            System.out.println("Static char: " + staticChar);
    
            // Example of using a local variable after initialization
            localInt = 100;
            System.out.println("Local int: " + localInt);
    
            // The following line would cause a compile-time error if localString was uncommented
            // System.out.println("Local String: " + localString);
        }
    }

    코드를 살펴보겠습니다.

    • 인스턴스 변수 (instanceInt, instanceString, instanceBoolean) 와 정적 변수 (staticDouble, staticChar) 를 초기화하지 않고 선언합니다. Java 는 자동으로 기본값을 할당합니다.
    • main 메서드 내에서 지역 변수 localInt를 선언합니다.
    • 인스턴스 변수에 액세스하기 위해 FieldExample 클래스의 객체 obj를 생성합니다. 정적 변수는 클래스 이름 (staticDouble, staticChar) 을 사용하여 직접 액세스할 수 있습니다.
    • 인스턴스 및 정적 변수의 값을 출력합니다. 기본값을 볼 수 있습니다.
    • 사용하기 전에 지역 변수 localInt를 명시적으로 초기화합니다.
    • 주석 처리된 줄 // String localString;과 그 아래 줄은 초기화되지 않은 지역 변수를 사용하려고 하면 어떻게 되는지 보여줍니다. 즉, Java 컴파일러가 오류를 발생시킵니다.
  3. FieldExample.java 파일을 저장합니다.

  4. 터미널에서 프로그램을 컴파일합니다.

    javac FieldExample.java

    컴파일이 성공하면 (오류 없음) FieldExample.class 파일이 생성됩니다.

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

    java FieldExample

    다음과 유사한 출력을 볼 수 있습니다.

    Instance int: 0
    Instance String: null
    Instance boolean: false
    Static double: 0.0
    Static char:
    Local int: 100

    이 출력은 초기화되지 않은 경우 인스턴스 및 정적 변수가 기본값 (int 의 경우 0, String 의 경우 null, boolean 의 경우 false, double 의 경우 0.0, char 의 경우 null 문자) 을 받는다는 것을 확인합니다. 또한 지역 변수는 사용하기 전에 명시적으로 초기화해야 함을 보여줍니다.

Java 가 초기화되지 않은 인스턴스/정적 변수와 지역 변수를 처리하는 방식의 차이점을 이해하는 것은 일반적인 프로그래밍 오류를 방지하는 데 중요합니다.

요약

이 랩에서는 기본값을 이해하고 null을 확인하여 Java 에서 변수가 초기화되었는지 확인하는 방법을 배웠습니다. 명시적으로 초기화되지 않은 경우 기본 데이터 유형이 기본값을 받는 반면, 객체 유형은 null로 기본 설정되는 방식을 살펴보았습니다. 등가 연산자 (==) 를 사용하여 null을 확인하는 연습을 했고 간단한 Java 프로그램을 통해 이를 시연했습니다.

또한 잠재적인 오류를 방지하고 Java 애플리케이션의 견고성을 보장하기 위해 초기화되지 않은 필드를 처리하는 것의 중요성에 대해 배웠습니다. 기본값을 이해하고 null에 대한 적절한 검사를 구현함으로써 더 안정적이고 예측 가능한 코드를 작성할 수 있습니다.