Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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
more
Archives
Today
Total
관리 메뉴

Jun's Ark

[step-12] Enum 본문

카테고리 없음

[step-12] Enum

차가운보리차 2021. 3. 25. 06:29

# Enum이란?

상수의 집합

public enum Language {
    C, JAVA, KOTLIN, JAVASCRIPT
}

# Enum 사용 이유

Enum을 사용하면 가독성을 높이고 오류를 줄일 수 있다.

 

# 특징

- enum에 정의된 상수들은 해당 enum type의 객체이다.

- 생성자와 메서드를 추가할 수 있다.

 

# 사용법

 

필요한 원소를 컴파일 타임에 다 알 수 있는 상수 집합이라면 항상 열거 타입을 사용하자.  태양계 행성, 한 주의 요일, 체스 말처럼 본질적으로 열거 타입인 타입은 당연히 포함된다. 그리고 메뉴 아이템, 연산 코드, 명령줄 플래그 등 허용하는 값 모두를 컴파일타임에 이미 알고 있을 때도 쓸 수 있다. 열거 타입에 정의된 상수 개수가 영원히 고정 불변일 필요는 없다. 열거 타입은 나중에 상수가 추가돼도 바이너리 수준에서 호환되도록 설계되었다

- 이펙티브 자바 3/E. Item 34. 219쪽

 

# 제공 메소드

메서드 설명
  T[] values()     해당 enum 타입에 정의된 상수 배열을 반환한다.  
  Class<E> getDeclaringClass()     열거형의 객체를 반환한다.  
  String name()     열거형 상수의 이름을 문자열로 반환한다.  
  int ordinal()     열거형 상수가 정의된 순서를 반환한다.(0부터 시작)  
  T valueOf(Class<T> enumType, String name)     지정된 열거형에서 name과 일치하는 열거형 상수를 반환한다.  

 

# Enum Set

EnumSet 열거형을 위해 고안된 특별한 Set 인터페이스 구현체이다.HashSet과 비교했을 때, 성능 상의 이점이 많기 때문에 열거형 데이터를 위한 Set이 필요한 경우 EnumSet을 사용하는 것이 좋다.

 

  • EnumSet은 AbstractSet 클래스를 상속하고 Set 인터페이스를 구현한다.
  • 오직 열거형 상수만을 값으로 가질 수 있다. 또한 모든 값은 같은 enum type이어야 한다.
  • null value를 추가하는 것을 허용하지 않는다. NullPointerException을 던지는 것도 허용하지 않는다.
  • ordinal 값의 순서대로 요소가 저장된다.
  • tread-safe하지 않다. 동기식으로 사용하려면 Collections.synchronizedMap을 사용하거나, 외부에서 동기화를 구현해야한다.
  • 모든 메서드는 arithmetic bitwise operation을 사용하기 때문에 모든 기본 연산의 시간 복잡도가 O(1)이다.