일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 어노테이션
- 스프링 부트
- log4j2
- 자바스크립트
- spring boot
- Deep Learning
- 제이쿼리
- react
- Java
- C++
- spring
- data structure
- JPA
- 하이브리드앱
- kotlin
- bean
- ES6
- javascript
- Test Coverage
- 구버전
- transformer
- cache
- jQuery
- Machine Learning
- AWS
- annotation
- 자료구조
- 테스트 커버리지
- 스프링
- 리액트
Archives
- Today
- Total
박서희연구소
[Java] EnumSet 본문
반응형
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));
}
- 끝 -
반응형
'○ 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