11주차 과제: Enum


목표

자바의 열거형에 대해 학습하세요.

학습할 것 (필수)

  • enum 정의하는 방법
  • enum이 제공하는 메소드 (values()와 valueOf())
  • java.lang.Enum
  • EnumSet

Enum 정의하는 방법

enum은 상수 그룹 (변수와 같이 변경할 수없는 변수) 을 나타내는 특수 "클래스"입니다. 또한 class와 마찬가지로 class속성과 메서드를 갖습니다. class와의 차이점으로는 열거 형 상수가 public, static및 final (재정의 할 수 없음)이라는 것입니다. 즉 객체를 만드는 데 사용할 수 없으며 다른 클래스를 확장 할 수 없습니다 



방법은 총 세가지가 있습니다. 
  •     별도의 .java 선언
  •     class 내부의 선언 
  •     class 외부의 선언 
즉 기존의 class와 비슷한 형태를 가지며 아래와 같은 특성을 추가로 같습니다.

  • 열거형으로 선언된 순서에 따라 0 부터 인덱스 값을 가집니다. 순차적으로 증가됩니다.
  • enum 열거형으로 지정된 상수들은 모두 대문자로 선언합니다.
  • 마지막에 열거형 변수들을 선언한 후 세미콜론(;)은 찍지 않습니다.

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보다 빠릅니다.
  • 계산은 일정한 시간에 실행되며 필요한 공간은 매우 적습니다. 

댓글

이 블로그의 인기 게시물

git-receive-pack not permitted on 깃 허브 로그인 관련 문제