IT/Programming / / 2023. 4. 27. 09:24

<Effective Java> RULE 32 비트필드 대신 EnumSet을 사용하라

반응형

 

//비트 필드 열겨형 상수
public class Test{
    public static final int STYLE_BOLD              =1 << 0; //1
    public static final int STYLE_ITALIC            =1 << 1; //2
    public static final int STYLE_UNDERLINE         =1 << 2; //4
    public static final int STYLE_STRIKETHROUGH     =1 << 3; //8

    public void applyStyles(int styles){ ... }
}
 
 

비트필드 장점

· 비트단위 산술 연산 - 합집합, 교집합 효율적 실행

 

비트필드 단점

· 결과값은 int enum 상수를 출력한 결과보다 이해하기 어렵다.

· 비트필드에 포함된 요소를 살펴보기 어렵다.

 

EnumSet

· Enum자료형의 값으로 구성된 집합을 효율적으로 표현할 수 있다.

· Set인터페이스 사용, 형안전성준수.

import java.util.EnumSet;
import java.util.Set;

public class EnumSetTest {
    public enum Style {
        BOLD, ITALIC, UNDERLINE, STRIKETHROUGH;
    }

    // 어떤 Set 객체도 인자로 전달할 수 있으나, EnumSet이 분명 최선
    public static void applyStyles(Set<Style> styles) { 
        System.out.println("size : "+styles.size());
        System.out.println("toString : "+styles.toString());
        
    }
    
    public static void main(String[] args) {
        applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));
    }
}

/* 
OUTPUT
size : 2
toString : [BOLD, ITALIC]
*/
 

결론

· EnumSet 클래스는 비트필드 만큼 간결하고 성등도 우수할 뿐 아니라 규칙 30의 Enum자료형의 장점을 갖추고 있다.

· 단점으로는 변경 불가능 EnumSet객체를 만들 수 없다.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유