Java 에서 Stack 이 비어 있는지 확인하는 방법

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 Stack이 비어 있는지 확인하는 방법을 배우게 됩니다. 표준 isEmpty() 메서드와 size() 메서드를 포함하여 이를 달성하기 위한 다양한 방법을 살펴볼 것입니다. 또한 null 스택의 경우를 처리하는 방법도 배우게 됩니다.

실습 예제를 통해 Java Stack의 비어 있음을 결정하는 이러한 기술을 사용하는 실질적인 경험을 얻게 될 것입니다. 이는 이 데이터 구조로 작업할 때 기본적인 연산입니다.

isEmpty() 를 사용하여 Stack 확인

이 단계에서는 isEmpty() 메서드를 사용하여 Java 에서 Stack이 비어 있는지 확인하는 방법을 배우게 됩니다. Stack 클래스는 Java Collections Framework 의 일부이며 객체의 LIFO(Last-In, First-Out) 스택을 나타냅니다. 스택이 비어 있는지 확인하는 것은 스택으로 작업할 때, 예를 들어 요소를 제거하기 전에 흔히 사용되는 연산입니다.

isEmpty() 메서드는 Stack을 포함한 컬렉션에 요소가 있는지 확인하는 간단하고 효율적인 방법입니다. 컬렉션이 비어 있으면 (true 요소가 없으면) false를 반환합니다.

isEmpty() 메서드를 시연하기 위해 간단한 Java 프로그램을 만들어 보겠습니다.

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

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

    import java.util.Stack;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a new Stack
            Stack<String> stack = new Stack<>();
    
            // Check if the stack is empty using isEmpty()
            boolean isEmptyBeforePush = stack.isEmpty();
            System.out.println("Is the stack empty before pushing elements? " + isEmptyBeforePush);
    
            // Push some elements onto the stack
            stack.push("Element 1");
            stack.push("Element 2");
    
            // Check if the stack is empty after pushing elements
            boolean isEmptyAfterPush = stack.isEmpty();
            System.out.println("Is the stack empty after pushing elements? " + isEmptyAfterPush);
        }
    }

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

    • import java.util.Stack;: 이 줄은 Stack 클래스를 가져와서 프로그램에서 사용할 수 있도록 합니다.
    • Stack<String> stack = new Stack<>();: 이 줄은 String 객체를 저장할 수 있는 새로운 빈 Stack을 만듭니다.
    • stack.isEmpty();: 이것이 우리가 집중하는 메서드입니다. stack 객체가 비어 있는지 확인합니다.
    • stack.push("...");: 이 메서드는 스택의 맨 위에 요소를 추가합니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 이제 수정된 프로그램을 컴파일해 보겠습니다. 터미널에서 ~/project 디렉토리에 있는지 확인합니다. 그런 다음 다음을 실행합니다.

    javac HelloJava.java

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

  5. 마지막으로 프로그램을 실행해 보겠습니다.

    java HelloJava

    다음과 유사한 출력이 표시됩니다.

    Is the stack empty before pushing elements? true
    Is the stack empty after pushing elements? false

    이 출력은 isEmpty() 메서드가 요소를 추가하기 전과 후에 스택의 상태를 올바르게 보고했음을 확인합니다.

size() 메서드로 확인

이전 단계에서는 isEmpty() 메서드를 사용하여 스택이 비어 있는지 확인했습니다. Stack을 포함한 컬렉션에 유용한 또 다른 메서드는 size() 메서드입니다. size() 메서드는 현재 컬렉션에 있는 요소의 수를 반환합니다. 이 메서드를 사용하여 스택의 크기가 0 인지 확인하여 스택이 비어 있는지 확인할 수 있습니다.

isEmpty()는 컬렉션이 비어 있는지 간단하게 확인하는 데 일반적으로 선호되며, 경우에 따라 더 효율적일 수 있지만, size() == 0을 확인하는 것도 동일한 결과를 얻습니다. 두 메서드를 모두 알고 있는 것이 좋습니다.

size() 메서드를 사용하여 비어 있는지 확인하도록 프로그램을 수정해 보겠습니다.

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

  2. isEmpty() 대신 size() == 0을 사용하도록 코드를 수정합니다.

    import java.util.Stack;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a new Stack
            Stack<String> stack = new Stack<>();
    
            // Check if the stack is empty using size()
            boolean isEmptyBeforePush = stack.size() == 0;
            System.out.println("Is the stack empty before pushing elements? " + isEmptyBeforePush);
    
            // Push some elements onto the stack
            stack.push("Element A");
            stack.push("Element B");
            stack.push("Element C");
    
            // Check the size of the stack after pushing elements
            int sizeAfterPush = stack.size();
            System.out.println("Size of the stack after pushing elements: " + sizeAfterPush);
    
            // Check if the stack is empty after pushing elements using size()
            boolean isEmptyAfterPush = stack.size() == 0;
            System.out.println("Is the stack empty after pushing elements? " + isEmptyAfterPush);
        }
    }

    변경 사항을 확인하십시오.

    • stack.isEmpty()stack.size() == 0으로 바꿔서 비어 있는지 확인했습니다.
    • 또한 stack.size()를 사용하여 요소를 푸시한 후 스택의 실제 크기를 출력하는 줄을 추가했습니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

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

    javac HelloJava.java

    다시, 출력이 없으면 컴파일이 성공했음을 의미합니다.

  5. 프로그램을 실행합니다.

    java HelloJava

    다음과 유사한 출력이 표시됩니다.

    Is the stack empty before pushing elements? true
    Size of the stack after pushing elements: 3
    Is the stack empty after pushing elements? false

    이 출력은 stack.size() == 0을 확인하면 빈 스택을 올바르게 식별하고 stack.size()가 요소의 수를 반환함을 보여줍니다.

Null Stack 테스트

이전 단계에서는 isEmpty()size()를 사용하여 Stack이 비어 있는지 확인하는 방법을 배웠습니다. Stack 객체 자체가 null인 경우 어떻게 되는지 이해하는 것도 중요합니다. Java 에서 null은 변수가 어떤 객체도 참조하지 않음을 의미합니다. null 객체에서 메서드를 호출하려고 하면 런타임 오류인 NullPointerException이 발생합니다.

이를 실제로 확인하고 처리하는 방법을 알아보겠습니다.

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

  2. 스택을 null로 설정한 다음 비어 있는지 확인하도록 코드를 수정합니다.

    import java.util.Stack;
    
    public class HelloJava {
        public static void main(String[] args) {
            // Create a new Stack and then set it to null
            Stack<String> stack = new Stack<>();
            stack.push("Some Element"); // Add an element first
            stack = null; // Now set the stack variable to null
    
            // Try to check if the stack is empty using isEmpty()
            try {
                boolean isEmpty = stack.isEmpty(); // This line will cause an error
                System.out.println("Is the stack empty? " + isEmpty);
            } catch (NullPointerException e) {
                System.out.println("Caught a NullPointerException! The stack object is null.");
            }
    
            // Try to check the size using size()
            try {
                 int size = stack.size(); // This line will also cause an error
                 System.out.println("Size of the stack: " + size);
            } catch (NullPointerException e) {
                 System.out.println("Caught a NullPointerException! Cannot get size of a null stack.");
            }
        }
    }

    다음은 새로운 내용입니다.

    • stack = null;: 이 줄은 stack 변수가 null을 가리키도록 합니다. 이전에 생성한 Stack 객체는 이 변수를 통해 더 이상 액세스할 수 없습니다.
    • try { ... } catch (NullPointerException e) { ... }: 이것은 try-catch 블록입니다. try 블록 내부의 코드 실행 중에 발생할 수 있는 잠재적인 오류 (예외) 를 처리하는 데 사용됩니다. NullPointerException이 발생하면 catch 블록 내부의 코드가 실행됩니다.
  3. 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

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

    javac HelloJava.java

    컴파일이 성공해야 합니다.

  5. 프로그램을 실행합니다.

    java HelloJava

    다음과 유사한 출력이 표시됩니다.

    Caught a NullPointerException! The stack object is null.
    Caught a NullPointerException! Cannot get size of a null stack.

    이 출력은 null 스택 변수에서 isEmpty() 또는 size()를 호출하려고 하면 NullPointerException이 발생하고, try-catch 블록이 이러한 예외를 성공적으로 처리했음을 보여줍니다.

이는 메서드를 호출하기 전에 객체가 null이 아닌지 확인하는 것이 중요한 이유를 보여줍니다. 간단한 조건 if (stack != null) { ... }을 사용하여 객체가 null인지 확인할 수 있습니다.

요약

이 랩에서는 Java 에서 Stack이 비어 있는지 확인하는 방법을 배웠습니다. 이 목적을 위한 주요 메서드인 isEmpty()를 살펴보았으며, 이는 Java Collections Framework 의 일부입니다. isEmpty()를 사용하여 스택에 요소가 있는지 확인하는 방법을 확인했으며, 빈 스택의 경우 true를 반환하고 그렇지 않은 경우 false를 반환합니다.

새로운 Stack을 생성하고, 요소를 푸시하기 전과 후에 비어 있는 상태를 확인하고, 결과를 출력하여 isEmpty()의 사용법을 시연했습니다. 이 실습을 통해 Java 프로그램에서 스택이 비어 있는지 확인하기 위해 isEmpty() 메서드를 효과적으로 사용하는 방법에 대한 이해를 굳혔습니다.