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

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 Set이 비어 있는지 확인하는 방법을 배우게 됩니다. Set에 요소가 있는지 여부를 결정하는 간단하고 효율적인 방법인 표준 isEmpty() 메서드를 살펴보겠습니다.

또한 size() 메서드를 사용하여 Set 의 크기를 확인하는 방법과 null Set 을 처리할 때 발생할 수 있는 NullPointerException을 처리하는 방법을 배우게 됩니다. 이 랩을 마치면 다양한 시나리오에서 Java Set 의 비어 있음을 확인하는 데 능숙해질 것입니다.

Set 확인에 isEmpty() 사용

이 단계에서는 Java 에서 isEmpty() 메서드를 사용하여 Set이 비어 있는지 확인하는 방법을 배우겠습니다. Set은 중복된 요소를 포함할 수 없는 컬렉션입니다. isEmpty() 메서드는 컬렉션에 요소가 있는지 여부를 결정하는 간단하고 효율적인 방법입니다.

  1. 먼저, ~/project 디렉토리에 SetCheck.java라는 새 Java 파일을 생성해 보겠습니다. 왼쪽의 파일 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "새 파일"을 선택한 다음 SetCheck.java를 입력하여 이 작업을 수행할 수 있습니다.

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

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Create a new HashSet
            Set<String> fruits = new HashSet<>();
    
            // Check if the set is empty using isEmpty()
            boolean isEmptyBeforeAdd = fruits.isEmpty();
            System.out.println("Is the fruits set empty before adding elements? " + isEmptyBeforeAdd);
    
            // Add some elements to the set
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
    
            // Check if the set is empty after adding elements
            boolean isEmptyAfterAdd = fruits.isEmpty();
            System.out.println("Is the fruits set empty after adding elements? " + isEmptyAfterAdd);
        }
    }

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

    • import java.util.HashSet;import java.util.Set;: 이 줄은 SetHashSet을 사용하기 위해 필요한 클래스를 가져옵니다.
    • Set<String> fruits = new HashSet<>();: 이 줄은 fruits라는 새 HashSet 객체를 생성합니다. 이 Set 이 String 객체를 저장하도록 지정하기 위해 <String>을 지정합니다.
    • boolean isEmptyBeforeAdd = fruits.isEmpty();: 이 줄은 fruits Set 에서 isEmpty() 메서드를 호출하고 결과를 isEmptyBeforeAdd라는 부울 변수에 저장합니다 (true 또는 false).
    • fruits.add("Apple");: 이 줄은 문자열 "Apple"을 fruits Set 에 추가합니다.
    • boolean isEmptyAfterAdd = fruits.isEmpty();: 이 줄은 요소를 추가한 후 Set 이 다시 비어 있는지 확인합니다.
  3. SetCheck.java 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).

  4. 이제 Java 프로그램을 컴파일해 보겠습니다. WebIDE 하단의 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다. 그런 다음 다음 명령을 실행합니다.

    javac SetCheck.java

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

  5. 마지막으로 java 명령을 사용하여 컴파일된 프로그램을 실행합니다.

    java SetCheck

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

    Is the fruits set empty before adding elements? true
    Is the fruits set empty after adding elements? false

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

size() 를 사용하여 Set 크기 확인

이전 단계에서는 isEmpty()를 사용하여 Set이 비어 있는지 확인하는 방법을 배웠습니다. 또 다른 일반적인 작업은 Set에 몇 개의 요소가 있는지 확인하는 것입니다. 이를 위해 size() 메서드를 사용합니다. size() 메서드는 현재 Set 에 있는 요소의 수를 반환합니다.

  1. WebIDE 편집기에서 ~/project 디렉토리의 SetCheck.java 파일을 엽니다.

  2. size() 메서드 호출을 포함하도록 main 메서드를 수정합니다. 기존 main 메서드를 다음 코드로 바꿉니다.

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Create a new HashSet
            Set<String> fruits = new HashSet<>();
    
            // Check the size of the set before adding elements
            int sizeBeforeAdd = fruits.size();
            System.out.println("Size of the fruits set before adding elements: " + sizeBeforeAdd);
    
            // Add some elements to the set
            fruits.add("Apple");
            fruits.add("Banana");
            fruits.add("Orange");
    
            // Check the size of the set after adding elements
            int sizeAfterAdd = fruits.size();
            System.out.println("Size of the fruits set after adding elements: " + sizeAfterAdd);
    
            // Add a duplicate element (Sets do not allow duplicates)
            fruits.add("Apple");
    
            // Check the size again
            int sizeAfterDuplicateAdd = fruits.size();
            System.out.println("Size of the fruits set after adding a duplicate: " + sizeAfterDuplicateAdd);
        }
    }

    다음과 같은 내용을 추가했습니다.

    • int sizeBeforeAdd = fruits.size();: 이 줄은 fruits Set 에서 size() 메서드를 호출하고 반환된 정수 값 (요소 수) 을 sizeBeforeAdd라는 변수에 저장합니다.
    • int sizeAfterAdd = fruits.size();: 처음 세 개의 요소를 추가한 후 크기를 확인합니다.
    • fruits.add("Apple");: "Apple"을 다시 추가하려고 시도합니다. "Apple"이 이미 Set 에 있으므로 이 작업은 Set 의 내용을 변경하지 않습니다.
    • int sizeAfterDuplicateAdd = fruits.size();: 중복을 추가하려는 시도 후 크기를 확인합니다.
  3. SetCheck.java 파일을 저장합니다.

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

    javac SetCheck.java

    다시, 출력이 없으면 컴파일이 성공했음을 나타냅니다.

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

    java SetCheck

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

    Size of the fruits set before adding elements: 0
    Size of the fruits set after adding elements: 3
    Size of the fruits set after adding a duplicate: 3

    이 출력은 size() 메서드가 요소 수를 올바르게 보고하고 중복 요소를 추가해도 Set 의 크기가 증가하지 않음을 보여줍니다.

Null Set 처리

이전 단계에서는 제대로 초기화된 Set을 사용했습니다. 그러나 실제 프로그래밍에서는 Set 변수가 null인 상황을 만날 수 있습니다. null 객체에서 isEmpty() 또는 size()와 같은 메서드를 호출하려고 하면 Java 에서 흔히 발생하는 오류인 NullPointerException이 발생합니다. 이러한 경우를 적절하게 처리하는 것이 중요합니다.

  1. WebIDE 편집기에서 ~/project 디렉토리의 SetCheck.java 파일을 엽니다.

  2. null Set 을 처리하는 방법을 보여주도록 main 메서드를 수정합니다. 기존 main 메서드를 다음 코드로 바꿉니다.

    import java.util.HashSet;
    import java.util.Set;
    
    public class SetCheck {
    
        public static void main(String[] args) {
            // Declare a Set variable but initialize it to null
            Set<String> colors = null;
    
            // Attempting to call isEmpty() or size() here would cause a NullPointerException
            // System.out.println("Is the colors set empty? " + colors.isEmpty()); // This would crash!
    
            // To safely check if a set is null or empty, we first check for null
            if (colors == null) {
                System.out.println("The colors set is null.");
            } else {
                // If it's not null, we can safely check if it's empty
                if (colors.isEmpty()) {
                    System.out.println("The colors set is empty.");
                } else {
                    System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
                }
            }
    
            // Now, let's initialize the set and add elements
            colors = new HashSet<>();
            colors.add("Red");
            colors.add("Blue");
    
            // Check again after initialization and adding elements
            if (colors == null) {
                System.out.println("The colors set is null.");
            } else {
                if (colors.isEmpty()) {
                    System.out.println("The colors set is empty.");
                } else {
                    System.out.println("The colors set is not empty and has " + colors.size() + " elements.");
                }
            }
        }
    }

    이 업데이트된 코드에서:

    • Set<String> colors = null;: Set 변수 colors를 선언하지만 명시적으로 null로 설정합니다.
    • NullPointerException을 발생시킬 줄을 주석 처리했습니다.
    • if (colors == null): 이것이 중요한 확인입니다. colors 변수에서 메서드를 호출하기 전에 먼저 null인지 확인합니다.
    • colorsnull이 아닌 경우 colors.isEmpty()를 사용하여 비어 있는지 확인하거나 colors.size()를 사용하여 크기를 가져옵니다.
    • 그런 다음 colors를 새 HashSet으로 초기화하고 요소를 추가하여 Set 이 null 이 아니고 비어 있지 않은 경우의 다른 출력을 표시합니다.
  3. SetCheck.java 파일을 저장합니다.

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

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

    java SetCheck

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

    The colors set is null.
    The colors set is not empty and has 2 elements.

    이것은 메서드에 액세스하려고 시도하기 전에 Set 변수에 대한 잠재적인 null 값을 안전하게 처리하는 방법을 보여줍니다. 초기화되지 않았을 수 있는 객체 참조를 처리할 때는 항상 먼저 null을 확인하십시오.

요약

이 Lab 에서는 Java 에서 Set이 비어 있는지 확인하는 방법을 배웠습니다. 이 확인을 수행하는 표준적이고 가장 효율적인 방법인 isEmpty() 메서드를 사용하는 것으로 시작했습니다. HashSet을 생성하고, 요소를 추가하기 전과 후에 비어 있는지 상태를 확인했으며, isEmpty()의 부울 출력을 관찰했습니다. 이는 Set 에 요소가 있는지 확인하기 위한 isEmpty()의 기본적인 사용법을 보여주었습니다.