○ Programming [Basic]/Java
[Java] EnumSet
SEOHUI PARK
2022. 9. 2. 17:25
반응형
1. EnumSet 이란?
EnumSet 은 java.util 패키지에서 제공하는 Enum 클래스와 함께 동작하는 구현체이다.
상수 그룹을 나타내는 목적으로 사용되는데, 계절 및 색깔의 경우 봄, 여름, 가을, 겨울, 검정색, 노랑색, 파랑색 등 몇 개의 열거형 유형을 나열하는 것으로 예를 들 수 있다.
2. 특징
- enum 값만 포함할 수 있고, 모든 값은 동일한 enum 에 속해야 함
- null 값을 추가하는 것을 허용하지 않으며, 시도하면 NullPointerException 이 발생
- thread 로부터 안전하지 않으므로, 필요한 경우 외부에서 동기화해야 함
- HashSet 보다 훨씬 빠른 고성능 구현체
- iterator 를 사용한 복제에서, fail-safe 하므로 컬렉션을 반복하면서 컬렉션이 수정될 때 ConcurrentModificationException 이 발생하지 않음
- Enumset 의 모든 메서드는 산술 비트 연산자를 이용하여 구현
3. 왜 사용하나?
- EnumSet 과 HashSet 을 비교했을 때, 보통 전자가 훨씬 빠른데, 값을 예측 가능한 순서로 저장하여, 각각의 계산에단 하나의 비트만 검사하면 되기 때문이다.
- HashSet 과는 달리 정확한 버킷을 찾기 위해 해시 코드를 연산할 필요가 없으며, 또한 비트 벡터의 특성으로 인해 EnumSet 은 매우 작고 효율적임(메모리를 덜 사용)
4. 내가 활용해 본 enum class
public enum OperationCode {
PLUS("001", "+", (number1, number2) -> number1 + number2),
MINUS("002", "-", (number1, number2) -> number1 - number2),
MULTIPLY("003", "*", (number1, number2) -> number1 * number2),
DIVIDE("004", "/", (number1, number2) -> number1 / number2);
private final String code;
private final String symbol;
private final DoubleBinaryOperator expression;
public double calculate(double number1, double number2) {
return expression.applyAsDouble(number1, number2);
}
}
public void operationCodeTest() {
OperationCode plusOperation = OperationCode.PLUS;
OperationCode minusOperation = OperationCode.MINUS;
OperationCode multiplicationOperation = OperationCode.MULTIPLY;
OperationCode divisionOperation = OperationCode.DIVIDE;
System.out.println(plusOperation.calculate(31, 28));
System.out.println(minusOperation.calculate(31, 28));
System.out.println(multiplicationOperation.calculate(31, 28));
System.out.println(divisionOperation.calculate(31, 28));
}
- 끝 -
반응형