반응형
//비트 필드 열겨형 상수
public class Test{
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
public void applyStyles(int styles){ ... }
}
비트필드 장점
· 비트단위 산술 연산 - 합집합, 교집합 효율적 실행
비트필드 단점
· 결과값은 int enum 상수를 출력한 결과보다 이해하기 어렵다.
· 비트필드에 포함된 요소를 살펴보기 어렵다.
EnumSet
· Enum자료형의 값으로 구성된 집합을 효율적으로 표현할 수 있다.
· Set인터페이스 사용, 형안전성준수.
import java.util.EnumSet;
import java.util.Set;
public class EnumSetTest {
public enum Style {
BOLD, ITALIC, UNDERLINE, STRIKETHROUGH;
}
// 어떤 Set 객체도 인자로 전달할 수 있으나, EnumSet이 분명 최선
public static void applyStyles(Set<Style> styles) {
System.out.println("size : "+styles.size());
System.out.println("toString : "+styles.toString());
}
public static void main(String[] args) {
applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
}
}
/*
OUTPUT
size : 2
toString : [BOLD, ITALIC]
*/
결론
· EnumSet 클래스는 비트필드 만큼 간결하고 성등도 우수할 뿐 아니라 규칙 30의 Enum자료형의 장점을 갖추고 있다.
· 단점으로는 변경 불가능 EnumSet객체를 만들 수 없다.
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 30 int상수 대신 enum을 사용하라 (0) | 2023.04.27 |
---|---|
<Effective Java> RULE 31 ordinal 대신 객체 필드를 사용하라 (0) | 2023.04.27 |
<Effective Java> RULE 33 ordinal을 배열첨자로 사용하는 대신 EnumMap을 이용하라 (0) | 2023.04.27 |
<Effective Java> RULE 34 확장 가능한 enum을 만들어야 한다면 인터페이스를 이용하라 (0) | 2023.04.27 |
<Effective Java> RULE 35 작명 패턴 대신 어노테이션을 사용하라 (0) | 2023.04.27 |