728x90
비트 필드 : 비트별 OR를 사용해 여러 상수를 하나의 집합으로 모을 수 있는 집합
public class Text{
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; // 5
// 매개변수 styles는 0개 이상의 STYLE_ 상수를 비트별 OR 한 값
public void applyStyle(int styles){...}
}
장점 : 비트 필드를 사용하면 비트별 연산 (AND ,OR)를 사용해 합집과 교집합 같은 집합 연산을 효율적으로 수행할수 있다.
단점 :
- 비트 필드값이 그대로 노출되면 해석하기가 어렵다.
- 원소 순회를 하기 어렵다.
- 최대 몇비트가 필요한지 API 작성시 미리 예측하여 적절한 타입을 선택해야한다.(int, long)
EnumSet
Java 7에 추가된 java.util 클래스로 열거타입의 값으로 구성된 집합으로 Set 인터페이스를 완벽히 구현한다.
원소가 64개 이하면 Enumset 전체를 long 변수 하나로 표현, 64개 이상이면 Set으로.
public class Text {
public enum Style {BOLD, ITALIC, UNDERLINE, STRIKETHROUGH}
public void applyStyles(Set<Style> styles) { //객체는 인터페이스 타입으로 참조하라 - 아이템 64)
/*메소드 구현*/
}
}
'JAVA > Effective Java' 카테고리의 다른 글
item 42) 익명 클래스보다는 람다를 사용하라 (0) | 2021.02.11 |
---|---|
item 64) 객체는 인터페이스를 사용해 참조하라. (0) | 2021.02.07 |
item 35) ordinal 메소드 대신에 인스턴스 필드를 사용하라. (0) | 2021.02.06 |
item28) 배열보다는 리스트를 사용하라 (0) | 2021.01.31 |
item 27) 비검사 경고를 제거하라 (0) | 2021.01.22 |