아이템 32. 비트필드(bit field)대신 EnumSet을 사용하라.

32. 비트필드(bit field)대신 EnumSet을 사용하라.

// 비트 필드 열거형 상수 - 안티패턴
public class Text {
    public static final int STYLE_BOLD = 1 << 0;            // 1
    public static final int STYLE_ITALIC = 1 << 1;          // 2
    public static final int STYLE_UNDERLINE = 1 << 2;       // 4
    public static final int STYLE_STRIKETHROUGH = 1 << 3;   // 8

    // 이 메서드의 인자는 STYLE_상수를 비트별(bitwise) OR 한 값이거나 0.
    public void applyStyles(int styles) { ... }
}

//use
public static void main(String[] args){
    Text text = new Text();
    // 비트 필드 이제는 피해야 하는 구현법
    text.applyStyles(Text.STYLE_BOLD | Text.STYLE_ITALIC);
}

비트 필드는 출력한 결과값에 대해 이해 하기 어렵다는 단점이 존재한다.

EnumSet을 사용하자.

public class Text{
    public enum Style { BOLD, ITALIC, UNDERLINE, STRIKETHROUGH }
    
    public void applyStyles(Set<Style> styles) { ... }
}

//use
public static void main(String[] args){
    Text text = new Text();
    text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
}

결론