스터디/이펙티브 자바

[Effective Java] Item36. 비트 필드 대신 EnumSet

📝 작성 : 2022.06.26  ⏱ 수정 : 
728x90

비트 필드 열거 상수

열거한 값들이 주로 집합으로 사용되는 경우, 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴

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

    // 매개변수 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 }

  // EnumSet이 가장 좋음
  public void applyStyles(Set<Style) styles) { ... }
}

text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
반응형