어제 오늘 내일

[Java 기초] Collections.emptySet()으로 비어있는 불변 Set 만들기 본문

IT/Java

[Java 기초] Collections.emptySet()으로 비어있는 불변 Set 만들기

hi.anna 2025. 9. 6. 12:50

메서드의 반환 타입이 Set일 때, 실제로는 아무 값도 없을 수 있습니다.
이럴 때 null을 반환하기보다는 비어있는 Set을 반환하는 것이 더 안전합니다.
이때 Collections.emptySet()을 사용하면 간단하게 처리할 수 있습니다.
이 메서드는 아무 요소도 없는 불변(immutable) Set을 만들 때 사용합니다.

 

1. 기본 사용법

import java.util.*;

public class EmptySetExample1 {
    public static void main(String[] args) {
        Set<String> empty = Collections.emptySet();

        System.out.println(empty);
    }
}

실행 결과

[]

👉 아무 요소도 없는 Set이 만들어졌습니다.

 

2. 수정 불가능한 Set

emptySet()으로 만든 Set은 불변이라서 수정할 수 없습니다.

import java.util.*;

public class EmptySetExample2 {
    public static void main(String[] args) {
        Set<Integer> emptyNumbers = Collections.emptySet();

        emptyNumbers.add(10); // 수정 시도
    }
}

실행 결과 (예외 발생)

Exception in thread "main" java.lang.UnsupportedOperationException

👉 요소 추가, 삭제, 교체가 모두 불가능합니다.

 

3. 활용 예시

  • 메서드 반환값: 검색 결과가 없을 때 null 대신 반환
  • 안전한 초기화: 비어 있는 Set으로 시작할 때
  • 불변 컬렉션: 읽기 전용 빈 집합이 필요할 때

 

4. 주의할 점

  • Collections.emptySet()은 항상 같은 인스턴스를 반환합니다. (싱글톤)
  • 따라서 객체 생성 비용이 없고 메모리 효율적입니다.
  • 자바 9 이상에서는 Set.of()를 활용해도 비슷한 효과를 얻을 수 있습니다. (Set.of()도 빈 Set 가능)

 

5. 정리

  • Collections.emptySet()
    👉 아무 요소도 없는 불변 Set 반환
  • 수정 시도 시 UnsupportedOperationException 발생
  • null 대신 반환하면 NullPointerException을 예방할 수 있음

👉 값이 없는 Set을 반환할 때는 null 대신 Collections.emptySet()을 쓰자!

 

 

반응형
Comments