열거 자료형 원소들이 주로 집합에 사용될 경우, 전통적으로는 INT ENUM 패턴을 이용했다. 아래와 같이 하면 상수들을 집합에 넣을 때 비트별로 OR연산을 사용할 수 있다.
집합을 비트 필드로 나타내면 비트 단위 산술 연산을 통해 합집합이나 교집합 등의 집합 연산도 효율적으로 할 수 있다. 하지만 위와 같은 코드는 int enum 패턴과 똑같은 단점들을 가지고 있다. 따라서 EnumSet이라는 클래스가 있는데, 이 클래스를 사용하면 특정한 enum 자료형의 값으로 구성된 집합을 효율적으로 표현할 수 있다.
appleyStyles 메서드에 EnumSet 객체를 전달하는 클라이언트 코드는 아래와 같다. EnumSet에는 정적 팩터리 메서드가 다양하게 준비되어 있어서 여러개중 선택해서 사용하면 된다.
요약
열거 자료형에 집합에 사용해야 할떄는 EnumSet을 사용하여 구현하도록 하자.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[열거형과 어노테이션]규칙34. 확장 가능한 enum을 만들어야 한다면 인터페이스를 이용하라 (0) | 2017.05.04 |
---|---|
[열거형과 어노테이션]규칙33. ordinal을 배열 첨자로 사용하는 대신 EnumMap을 이요하라 (0) | 2017.05.03 |
[열거형과 어노테이션]규칙31. ordinal 대신 객체 필드를 사용하라 (0) | 2017.05.03 |
[열겨형과 어노테이션]규칙30. int 상수 대신 enum을 사용하라 (0) | 2017.05.03 |
[제네릭]규칙29. 형 안전 다형성 컨테이너를 쓰면 어떨지 따져보라 (0) | 2017.05.03 |