[Effective Java 3/e] 아이템 36 - 비트 필드 대신 EnumSet을 사용하라


아이템 36 - 비트 필드 대신 EnumSet을 사용하라

비트 필드 열거 상수 - 구닥다리 기법

public class Text {
  public static final int STYLE_BOLD = 1 << 0; // 1
  public static final int STYLE_ITALIC = 1 << 1; // 2

  // 매개변수 styles는 0개 이상의 STYLE_ 상수를 비트별 OR한 값이다.
  public void applyStyles(int styles) { ... }
}

text.applyStyles(STYLE_BOLD | STYLE_ITALIC);
  • 비트 필드 - 비트별 OR 사용해 여러 상수를 하나의 집합으로 모을 수 있다.
  • 해석하기 어렵고 정수 열거 상수의 단점을 그대로 지니고 있다.

EnumSet - 비트 필드를 대체하는 현대적 기법

public class Text {
  public enum Style { BOLD, ITALIC }

  // 어떤 Set을 넘겨도 되나, EnumSet이 가장 좋다.
  public void applyStyles(Set<Style) styles) { ... }
}

text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
  • EnumSet 클래스는 열거 타입 상수의 값으로 구성된 집항르 효과적으로 표현
  • Set 인터페이스를 완벽히 구현, 타입 안전, 다른 어떤 Set 구현체와도 함께 사용 가능