본문 바로가기

자바

Enum

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