brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jul 06. 2018

열거형(Enum)과 주석(Annotation)

#32 비트(bit) 필드 대신 EnumSet을 사용하자

Effective Java - 열거형(Enum)과 주석(Annotation)


#32 비트(bit) 필드 대신 EnumSet을 사용하자


아래 코드는 int enum 패턴을 통해 비트 필드 상수를 구현한 코드입니다.

#01 Text class


비트 OR 연산을 통해 여러 개의 상수를 하나의 비트 필드 값으로 결합할 수 있습니다.

#02 OR 연산자


이렇게 비트 필드를 이용하면 합집합, 교집합 같은 집합 연산을 쉽게 할 수 있지만, int enum 상수의 모든 단점이 존재합니다.

ex) 타입 안정성이 떨어짐, 그룹 별 관리 어려움 등




EnumSet


Set 인터페이스를 구현한 EnumSet을 이용하여 비트 필드를 대신할 수 있습니다.


#03 TextEnumSet class


기본적으로 Set 인터페이스를 구현했기 때문에, 중복 값을 허용하지 않고 Set 인터페이스의 다양한 기능도 이용할 수 있습니다.

#03 EnumSet


int 값이 아니기 때문에 성능이 더 안 좋을 거 같지만, 실제로 내부를 보면 64개 이하의 상수를 가지면, EnumSet 전체가 하나의 long 타입으로 표현되기 때문에 성능상 문제도 없습니다.


#04 EnumSet class
#05 RegularEnumSet class




EnumSet은 enum 타입을 이용하기 때문에 int enum 패턴의 문제점을 보완하고, enum 타입의 장점을 그대로 이용할 수 있습니다.

따라서 비트 필드를 이용할 때는, EnumSet을 이용하는 게 좋습니다.


매거진의 이전글 열거형(Enum)과 주석(Annotation)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari