[Java] EnumSet

해니·2024년 10월 24일
1

Java

목록 보기
23/34
post-thumbnail

EnumSet이란?

  • java.util 패키지에서 제공하는 Enum 클래스와 함께 동작하는 구현체

EnumSet의 특징

  • 높은 성능
    • Enumset의 모든 메서드는 산술 비트 연산자를 이용하여 구현된다.
    • 추가, 제거, 조회 등의 작업이 매우 빠르다.
  • 요소 타입 제한
    • enum 값만 포함할 수 있고, 모든 값은 동일한 enum 에 속해야 한다.
  • null safety
    • null 값을 추가할 수 없다.
    • null 값을 추가하려고 하면, NullPointerException이 발생한다.
  • 예측가능한 순서
    • enum 상수가 선언된 순서대로 요소를 반복한다.
    • 일반적인 HashSet과 다르게 예측 가능한 순서로 값을 처리할 수 있다.



EnumSet 메서드


public enum Color {
    RED, YELLOW, GREEN, BLUE, BLACK, WHITE
}

allOf()

  • 모든 요소를 포함하는 EnumSet을 만들 수 있다.
EnumSet<Color> set = EnumSet.allOf(Color.class);
set.forEach(System.out::println); // RED, YELLOW, GREEN, BLUE, BLACK, WHITE 

noneOf()

  • 비어있는 Enum 컬렉션을 갖는 EnumSet을 생성한다.
EnumSet<Color> set = EnumSet.noneOf(Color.class);

of()

  • 들어갈 요소를 직접 입력하여 EnumSet을 생성한다.
EnumSet<Color> set = EnumSet.of(Color.YELLOW, Color.BLUE);

complementOf()

  • 원하는 요소를 제거하고 EnumSet을 생성한다.
EnumSet<Color> set = EnumSet.complementOf(EnumSet.of(Color.BLACK,Color.BLUE));
set.forEach(System.out::println);

copyOf()

  • 다른 EnumSet의 모든 요소를 복사하여 새로운 EnumSet을 생성한다.
EnumSet.copyOf(EnumSet.of(Color.BLACK, Color.WHITE));

add()

  • EnumSet에 요소를 추가한다.
EnumSet<Color> set = EnumSet.of(Color.YELLOW, Color.BLUE);
set.add(Color.RED);

contains()

  • 특정 요소가 EnumSet에 포함되어 있는지 확인한다.

EnumSet<Color> set = EnumSet.of(Color.YELLOW, Color.BLUE);
set.add(Color.RED);
boolean isContain = set.contains(Color.RED);

if(isContain) {
	// 빨간색이 포함되어 있음 
}

remove()

  • EnumSet에서 특정 요소를 제거한다.
set.remove(Color.RED);



EnumSet 활용 예제

public enum ReleaseProcessStatus implements BaseEnumCode<String> {

  UN_PROCESS("UNP", "미작업", EnumSet.of(UN_WORKED)),
  READY("RDY", "출고준비", EnumSet.of(ALLOCATION_ING)),
  PROCESSING("ING", "출고중", EnumSet.of(ALLOCATION, PACK_COMPLETE, DELIVERY_STANDBY)),
  COMPLETE("COM", "출고완료", EnumSet.of(DELIVERY_COMPLETE)),
  ;

  private final String code;
  private final String desc;
  private final EnumSet<WorkStatus> workStatuses;

}

if (EnumSet.of(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(date.getDayOfWeek())) {
	/* ... */
}

🗓️ LocalDate.getDayOfWeek()
: Enum DayOfWeek의 요일 필드를 가져온다.






출처

아이템 36 - 비트 필드 대신 EnumSet을 사용하라
[Java] EnumSet
자바 enum 클래스는 왜 생겨났을까? 열거형의 필요성과 사용법
Enum 활용하기 (feat : EnumSet, EnumMap)
[Java] Enum, 자바의 열거타입을 알아보자

profile
💻 ⚾️ 🐻

0개의 댓글