#32 비트(bit) 필드 대신 EnumSet을 사용하자
아래 코드는 int enum 패턴을 통해 비트 필드 상수를 구현한 코드입니다.
비트 OR 연산을 통해 여러 개의 상수를 하나의 비트 필드 값으로 결합할 수 있습니다.
이렇게 비트 필드를 이용하면 합집합, 교집합 같은 집합 연산을 쉽게 할 수 있지만, int enum 상수의 모든 단점이 존재합니다.
ex) 타입 안정성이 떨어짐, 그룹 별 관리 어려움 등
Set 인터페이스를 구현한 EnumSet을 이용하여 비트 필드를 대신할 수 있습니다.
기본적으로 Set 인터페이스를 구현했기 때문에, 중복 값을 허용하지 않고 Set 인터페이스의 다양한 기능도 이용할 수 있습니다.
int 값이 아니기 때문에 성능이 더 안 좋을 거 같지만, 실제로 내부를 보면 64개 이하의 상수를 가지면, EnumSet 전체가 하나의 long 타입으로 표현되기 때문에 성능상 문제도 없습니다.
EnumSet은 enum 타입을 이용하기 때문에 int enum 패턴의 문제점을 보완하고, enum 타입의 장점을 그대로 이용할 수 있습니다.
따라서 비트 필드를 이용할 때는, EnumSet을 이용하는 게 좋습니다.