비트 필드 : 정수 상수의 집합을 표현하는 방법 중 하나로, 각 비트를 특정 상수에 대응시키는 방식. 하지만 비트 필드는 가독성이 낮고, 오류가 발생하기 쉽다.
public class FontExample {
// 글꼴 종류를 비트 필드로 표현
public static final int PLAIN = 1 << 0; // 0001
public static final int BOLD = 1 << 1; // 0010
public static final int ITALIC = 1 << 2; // 0100
public static final int UNDERLINE= 1 << 3; // 1000
// 비트 필드로 표현된 글꼴 스타일 설정 메서드
public void setStyle(int style) {
// 스타일 설정
}
// 비트 필드로 표현된 글꼴 스타일 반환 메서드
public int getStyle() {
// 스타일 반환
return 0;
}
}
EnumSet : 열거형(Enum)을 기반으로 하는 집합(Set) 구현체 중 하나. 이 클래스는 열거 상수(Enum 상수) 집합을 효율적으로 저장하고 다룰 수 있도록 최적화되어 있다.
import java.util.EnumSet;
public class FontExample {
// 글꼴 종류를 열거형으로 정의
public enum Style {
PLAIN, BOLD, ITALIC, UNDERLINE
}
// EnumSet으로 표현된 글꼴 스타일 설정 메서드
public void setStyle(EnumSet<Style> styles) {
// 스타일 설정
}
// EnumSet으로 표현된 글꼴 스타일 반환 메서드
public EnumSet<Style> getStyle() {
// 스타일 반환
return EnumSet.noneOf(Style.class);
}
}
결론 : 열거할 수 있는 타입을 한데 모아 집합 형태로 사용한다고 해도 비트 필드를 사용할 이유는 없다. EnumSet 클래스가 비트 필드 수준의 명료함과 성능을 제공하고 열거 타입의 장점까지 선사하기 때문이다. EnumSet의 유일한 단점이라면 불변 EnumSet을 만들 수 없다는 것이다.
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 (0) | 2024.04.08 |
---|---|
[이펙티브 자바] 아이템 37. ordinal 인덱싱 대신 EnumMap을 사용하라 (0) | 2024.04.06 |
[이펙티브 자바] 아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라 (0) | 2024.04.05 |
[이펙티브 자바] 아이템 34. int 상수 대신 열거 타입을 사용하라 (0) | 2024.04.04 |
[이펙티브 자바] 아이템 33. 타입 안전 이종 컨테이너를 고려하라 (0) | 2024.04.03 |