이펙티브 자바 아이템 36. 비트필드 대신 EnumSet을 사용하라 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package com.github.sejoung.codetest.enumtest;import java.util.Objects;public class Text { public static final int STYLE_BOLD = 1 << 0 ; public static final int STYLE_ITALIC = 1 << 1 ; public static final int STYLE_UNDERLINE = 1 << 2 ; public static final int STYLE_STRIKETHROUGH = 1 << 3 ; public void applyStyles (int styles) { System.out.printf("Applying styles %s to text%n" , Objects.requireNonNull(styles)); } public static void main (String[] args) { Text text = new Text (); text.applyStyles(STYLE_BOLD | STYLE_ITALIC); } }
실행결과
1 2 3 Applying styles 8 to text Process finished with exit code 0
이렇게 사용하는것을 비트필드라고 한다 이렇게 하는것은 집합연산을 통해서 하나의 값을 쓸려고 하는것이다.
이것은 구닥다리 스타일이다.
이것을 enumset을 이용하면 아래의 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package com.github.sejoung.codetest.enumtest;import java.util.EnumSet;import java.util.Objects;import java.util.Set;public class Text { public enum Style {BOLD, ITALIC, UNDERLINE, STRIKETHROUGH} public void applyStyles (Set<Style> styles) { System.out.printf("Applying styles %s to text%n" , Objects.requireNonNull(styles)); } public static void main (String[] args) { Text text = new Text (); text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC)); } }
실행결과
1 2 3 4 Applying styles [BOLD, ITALIC] to text Process finished with exit code 0
열거할수 있는 타입을 한데 모아 집합 형태로 사용한다고 해도 비트 필드를 사용할 이유는 없다.
참조