enum 정의하는 방법
enum 이란?
열거형 타입을 의미한다. 특정 값만 들어올 수 있도록 하기 위해서 사용한다. (type-safe)
다음과 같이 기본적인 정의를 할 수 있다.
enum WEEK {
MONDAY,TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
enum 내부에서 변수 선언이나 함수 등을 선언할 수 있다.
아래와 같이 변수 선언을 할 수 있고 enum 이 생성될 때 값을 초기화해 줄 수 있다.
public enum WEEK {
MONDAY(true),
TUESDAY(true),
WEDNESDAY(true),
THURSDAY(true),
FRIDAY(true),
SATURDAY(false),
SUNDAY(false),
;
@Getter
private boolean isWorkDay;
public int getTimeToWakeUp() {
if (this.isWorkDay) return 8;
return 12;
}
WEEK(boolean isWorkDay) {
this.isWorkDay = isWorkDay;
}
}
WEEK.FRIDAY.isWorkDay(); // return true
WEEK.FRIDAY.getTimeToWakeUp()); // return 8
WEEK.SATURDAY.isWorkDay(); // return false
WEEK.SATURDAY.getTimeToWakeUp()); // return 12
java.lang.Enum
모든 enum 타입들이 상속받는 abstract 클래스이다.
이 클래스도 클래스이기 때문에 Object 클래스를 상속받는다.
enum이 제공하는 메소드
StaticMethods valueOf(String arg) String 값을 enum에서 가져옴. 값이 없으면 예외 발생 enum 클래스 제공
StaticMethods | valueOf(String arg) | String 값을 enum에서 가져옴. 값이 없으면 예외 발생 | enum 클래스 제공 |
valueOf (Class<T> class, String arg) |
넘겨받은 class에서 String찾아, enum에 가져옴. valueOf(String arg)는 내부적으로 자기자신 Class를 가져옴. |
java.lang.Enum 클래스 제공 |
|
values() | eum의 요소들을 순서대로 enum타입의 배열로 리턴. ENUM$VALUES)의 카피임으로 자주 호출하지 않길 |
enum 클래스 제공 | |
Static이 아닌 Methods | name() | 호출된 값의 이름을 String으로 리턴. | java.lang.Enum 클래스 제공 |
ordinal() | 해당 값이 enum에 정의된 순서를 리턴. | java.lang.Enum 클래스 제공 |
|
compareTo(E o) | enum과 지정된 객체의 순서를 비교. 지정된 객체보다 작은 경우 음의 정수, 동일하면 0, 크면 양의 정수 리턴 |
java.lang.Enum 클래스 제공 |
|
equals(Object other) | 지정된 객체가 enum 정수와 같은경우, true를 리턴. | java.lang.Enum 클래스 제공 |
EnumSet
한 타입의 enum 값들만 들어갈 수 있는 특별한 Set 이다.
특징
- 굉장히 빠르다.
- 내부적으로 bit vector 로 구현되어있어서, 기존에 int 로 비트 연산을 하는 것만큼 빠른 데, 게다가 type-safe 하다.
- 대게 HashSet 구현체들보다 빠르다.
- 동시성에 약하다.
- EnumSet 을 순회하는 동안 변화가 있으면 반영되지 않을 수 있다.
- 필요하다면 Collections.synchronizedSet(java.util.Set<T>) 함수로 EnumSet 을 래핑해서 사용할 수도 있다.
ref
- https://limkydev.tistory.com/66
[Java] Enum의 사용법
안녕하세요. 지난 시간엔 EnumClass가 무엇이고 어떤 장점들이 있는지 알아보았습니다. 2017/06/27 - [Java] - [Java] enum 이란? (enum 개념익히기) 이번 시간은 Enum 사용방법을 더 알아보면서 Enum에 대한 이
limkydev.tistory.com
- https://docs.oracle.com/en%2Fjava%2Fjavase%2F11%2Fdocs%2Fapi%2F%2F/java.base/java/lang/Enum.html
Enum (Java SE 11 & JDK 11 )
docs.oracle.com
- https://docs.oracle.com/en%2Fjava%2Fjavase%2F11%2Fdocs%2Fapi%2F%2F/java.base/java/util/EnumSet.html
'자바' 카테고리의 다른 글
자바 애노테이션 프로세서 (1) | 2024.04.12 |
---|---|
자바 애노테이션 (0) | 2024.04.03 |
멀티쓰레드 프로그래밍 (0) | 2024.02.24 |
예외처리 (1) | 2024.01.18 |
자바 패키지 (0) | 2023.12.16 |