박서희연구소

[Java] EnumSet 본문

○ Programming [Basic]/Java

[Java] EnumSet

SEOHUI PARK 2022. 9. 2. 17:25
반응형

1. EnumSet 이란?

EnumSetjava.util 패키지에서 제공하는 Enum 클래스와 함께 동작하는 구현체이다.

상수 그룹을 나타내는 목적으로 사용되는데, 계절 및 색깔의 경우 봄, 여름, 가을, 겨울, 검정색, 노랑색, 파랑색 등 몇 개의 열거형 유형을 나열하는 것으로 예를 들 수 있다.

EnumSet

 

2. 특징

  • enum 값만 포함할 수 있고, 모든 값은 동일한 enum 에 속해야 함
  • null 값을 추가하는 것을 허용하지 않으며, 시도하면 NullPointerException 이 발생
  • thread 로부터 안전하지 않으므로, 필요한 경우 외부에서 동기화해야 함
  • HashSet 보다 훨씬 빠른 고성능 구현체
  • iterator 를 사용한 복제에서, fail-safe 하므로 컬렉션을 반복하면서 컬렉션이 수정될 때 ConcurrentModificationException 이 발생하지 않음
  • Enumset 의 모든 메서드는 산술 비트 연산자를 이용하여 구현

3. 왜 사용하나?

  • EnumSetHashSet 을 비교했을 때, 보통 전자가 훨씬 빠른데, 값을 예측 가능한 순서로 저장하여, 각각의 계산에단 하나의 비트만 검사하면 되기 때문이다.
  • 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));
}

결과

- 끝 -

반응형

'○ Programming [Basic] > Java' 카테고리의 다른 글

[Java] List  (0) 2022.12.26
[Java] Stream  (0) 2022.09.06
[Java] Optional  (0) 2022.09.05
[Java] Lambda Expression  (0) 2022.09.05
[Java] 객체 지향 프로그래밍[OOP(Object-Oriented Programming)] 이란?  (0) 2020.09.16
Comments