11주차 과제: Enum
목표
자바의 열거형에 대해 학습하세요.
학습할 것 (필수)
- enum 정의하는 방법
- enum이 제공하는 메소드 (values()와 valueOf())
- java.lang.Enum
- EnumSet
Enum 정의하는 방법
enum은 상수 그룹 (변수와 같이 변경할 수없는 변수) 을 나타내는 특수 "클래스"입니다. 또한 class와 마찬가지로 class속성과 메서드를 갖습니다. class와의 차이점으로는 열거 형 상수가 public, static및 final (재정의 할 수 없음)이라는 것입니다. 즉 객체를 만드는 데 사용할 수 없으며 다른 클래스를 확장 할 수 없습니다
Enum이 제공하는 메소드 (values()와 valueOf())
선언을 했다면 이후에 사용을 하는곳이 있습니다. 이때 enum이 제공하는 메소드(values()와 vaulueOf()) 를 이용해 값을 가져올 수 있습니다.
java.lang.Enum
Enum 클래스는 모든 java 언어 열거타입의 상위 클래스입니다.
아래는 Enum 클래스에 정의된 메서드 입니다.
- compareTo(E o) : ordinal을 기준으로 지정된 객체와 비교합니다.크면 양수 작으면 음수 같으면 0을 반환
- eqauls(Object other) : 지정된 객체(other)가 열거형 상수와 같으면 true를 반환합니다.
- finalize() : 해당 Enum클래스가 final 메서드를 가질 수 없게 합니다.
- getDeclaring() : 열거형 상수의 열거형 타입에 해당하는 Class 객체를 반환합니다.
- hashCode() : 열거형 상수의 해시 코드를 반환합니다.
- name() : 열거형 상수의 이름을 반환합니다.
- ordinal() : 이 열거형 상수가 정의된 순서를 반환합니다.
- toString() : 열거형 상수의 이름을 반환합니다.
- valueof(Class<T> enumType, String name) : 해당 상수의 이름을 반환 합니다. .name으로 같은 효과로 불러낼 수 있습니다.
EnumSet
EnumSet은 Enum과 함께 사용하기 위한 특별 Set 구현체 입니다.
모든 요소는 set을 만들 때 명시적으로 또는 암묵적으로 지정된 단일 열거형 타입에서 가져와야 합니다. HashSet 보다 훨씬 빠른 고성능 세트 구현 입니다. Null 요소는 허용되지 않습니다. null 요소를 삽입하려고 하면 NullPointException이 발생합니다.
EnumSet의 계층
java.lang.Object↳ java.util.AbstractCollection <E>↳ java.util.AbstractSet <E>↳ java.util.EnumSet <E>
EnumSet은 추상 클래스이므로 인스턴스를 직접 만들 수 없습니다.
대표적으로 아래 두가지의 메소드를 통해 EnumSet을 구현합니다.
- RegularEnumSet 는 단일 long 개체를 사용하여 EnumSet의 요소를 저장합니다. long 요소의 각 비트는 Enum 값을 나타냅니다. long의 크기는 64 비트이므로 최대 64 개의 서로 다른 요소를 저장할 수 있습니다.
- JumboEnumSet 은 긴 요소의 배열을 사용하여 EnumSet의 요소를 저장합니다. RegularEnumSet과의 유일한 차이점은 JumboEnumSet은 긴 배열을 사용하여 비트 벡터를 저장함으로써 64 개 이상의 값을 허용한다는 것입니다.
EnumSet의 메서드
- allOf (Class <E> elementType) - 지정된 요소 유형의 모든 요소를 포함하는 열거 형 집합을 만듭니다.
- clone () - 이 세트의 복사본을 반환합니다.
- ComplementOf (EnumSet <E> s) - 처음에는 지정된 집합에 포함되지 않은이 형식의 모든 요소를 포함하는 지정된 열거 형 집합과 동일한 요소 형식을 사용하여 열거 형 집합을 만듭니다.
- copyOf (컬렉션 <E> c) - 지정된 컬렉션에서 초기화 된 열거 형 집합을 만듭니다.
- copyOf (EnumSet <E> s) - 지정된 열거 형 집합과 동일한 요소 유형을 사용하여 처음에 동일한 요소 (있는 경우)를 포함하는 열거 형 집합을 만듭니다.
- noneOf (Class <E> elementType) - 지정된 요소 유형을 사용하여 빈 열거 형 집합을 만듭니다.
- of (E e) - 처음에 지정된 요소를 포함하는 열거 형 집합을 만듭니다.
- 범위 (E ~, E ~) - 지정된 두 끝점에 의해 정의 된 범위의 모든 요소를 처음에 포함하는 열거 형 집합을 만듭니다.
EnumSet 사용의 이점
- RegularEnumSet 및 JumboEnumSet을 사용한 구현으로 인해 EnumSet의 모든 메서드는 비트 산술 연산을 사용하여 구현됩니다.
- EnumSet은 올바른 버킷을 찾기 위해 hashCode를 계산할 필요가 없기 때문에 HashSet보다 빠릅니다.
- 계산은 일정한 시간에 실행되며 필요한 공간은 매우 적습니다.
댓글
댓글 쓰기