Effective Java 3rd ITEM 36
ITEM 35. Use EnumSet instead of bit fields
비트 필드
1 | public class Text { |
열거 값들이 단독이 아닌 집합으로 사용될 경우, 예전에는 정수 열거 상수에 2의 거듭 제곱 값을 할당하여 사용했었다.
장점
- 비트별 연산을 사용해 집합 연산이 효율적이다.
단점
- 정수 열거 상수의 모든 단점을 그대로 지닌다.
- 비트 필드 값이 그대로 출력되면 해석하기 어렵다.
- 비트 필드의 모든 원소를 순회하기 어렵다.
- 최대 몇 비트가 필요한지 예측하여 적절한 타입(int나 long)을 선택해야 한다.
EnumSet
1 | public class Text { |
- 열거 타입 상수의 값으로 구성된 집합을 표현한다.
- Set 인터페이스를 완벽히 구현하며 타입 안전하다.
- 다른 Set 구현체와도 함께 사용할 수 있다.
- 내부 구현은 비트 벡터로 되어있어서 원소 64개 이하라면 long 변수 하나로 표현하여 비트 필드에 비견되는 성능을 보여준다.
removeAll() retainAll()
같은 대량 작업은 효율적으로 처리할 수 있게 구현되어있다.- 직접 비트를 다룰 때 겪는 오류들에서 해방된다.
- 깔끔!
EnumSet을 사용하자!