비트 필드 열거 상수
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
'STUDY > 이펙티브자바' 카테고리의 다른 글
8-2) 방어적 복사본을 만들라 (0) | 2022.11.29 |
---|---|
8-1) 매개변수가 유효한지 검사하라 (0) | 2022.11.29 |
6-2) ordinal 메소드 대신 인스턴스 필드를 사용하라 (0) | 2022.11.03 |
6-1) int 상수 대신 enum을 사용하라 (0) | 2022.11.02 |
5-7) 타입 안전 이종 컨테이너를 고려하라 (0) | 2022.10.21 |