STUDY/이펙티브자바
6-3) 비트 필드 대신 EnumSet을 사용하라
nankisu
2022. 11. 3. 11:35
비트 필드 열거 상수
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) {
...
}
...
}
열거한 값들이 집합으로 사용되고 메모리 사용이 제한되어 있을 경우, 각 값을 한 비트씩 할당하여 비트연산하는 방식을 사용했었다. 하지만 이 방식은 파라미터로 전달되는 타입을 확실히 제한할 수 없다. 그리고 비트연산된 값을 보고 개발자가 그 의미를 해석하기도 쉽지 않다.
EnumSet
public class Text {
public enum Style {BOLD, ITALIC, UNDERLINE, STRIKETHROUGH}
public void applyStyles(Set<Style> styles) {
...
}
...
}
EnumSet은 enum 상수의 집합을 효과적으로 표현해준다. EnumSet의 내부는 비트 벡터로 구현되어 있어서 원소가 64개 이하라면 long 변수 하나로 전체를 표현한다. 개발자가 그 의미를 해석하기도 더 쉬워졌고, 파라미터의 타입을 필요한 enum 타입으로 제한한다는 점에서 더 좋은 코드라고 할 수 있다.
728x90