Obj. 자바의 열거형에 대해 학습.
Todo.
11-1. enum 정의하는 방법
11-2. enum이 제공하는 메소드(values() 와 valueOf())
11-3. java.lang.Enum
11-4. EnumSet
11-1. enum 정의하는 방법
자바에서는 Enum을 '열거형' 또는 Enumeration 또는 상수 집합이라고 한다.
멤버라 불리는 명명된 값의 집합을 이루는 자료형이다.
언어의 상수 역할을 하는 식별자이다.
enum은 각 클래스를 인스턴스화 시킨 것이다.
네임 스페이스 기법을 활용해서 상수의 종류를 늘려 주지만, 많은 조건이 들어 올 수록 변수 명이 복잡해 질 것이다.
이를 보완하기 위해 Enum을 활용하여 상수를 만들어 준다. 단, 다른 Enum간에는 비교를 할 수 없다.
일반적인 선언 방법은 아래와 같다.
enum Day{ //일반적으로 0부터 연속적인 정수 값을 부여한다.
Sun, Mon, Tue, Wen, Thu, Fri, Sat;
}
값을 가진 Enum 상수
enum 열거형 이름 {
상수명(), 상수명(), 상수명();
private final [DATA TYPE] [DATA NAME];
public getDataName(){
return DataName;
}
private 생성자( 매개변수 ..){
변수 = 값;
}
}
다중 값을 가진 Enum 상수
getter 함수를 활용해서 값을 꺼내오면 된다.
또한 메서드 오버라이딩을 할 수 있다.
enum Data{
A("A Value", 1),
B("B Value", 2),
C("C Value", 3);
private final String value;
private final int num;
Data(String value, int num)
{
this.value = value;
this.num = num;
}
public String getvalue(){
return value;
}
public int getnum(){
return num;
}
}
11-2. enum이 제공하는 메소드(values() 와 valueOf())
- values() : 열거형의 모든 상수를 배열에 담아 반환한다.
- valueOf(String name): 열거형 상수의 이름으로 문자열 상수에 대한 참조를 얻을 수 있게 해준다.
컴파일러가 자동으로 추가해주는 메소드 이다.
- name( ) : 열거형 상수의 이름을 문자열로 반환한다.
- ordinal( ) : 열거형 상수가 정의된 순서(0부터 시작)를 정수로 반환한다.
- toString( ) : 열거형 상수의 이름을 문자열로 반환한다.
- compareTo( ) : 정렬의 기준을 위한 메소드로 비교 대상보다 순서가 빠르면 -1, 같으면 0, 느리면 1을 반환한다.
- valueOf(enumType, name) : 지정된 열거형에서 name과 일치하는 열거형 상수를 반환한다.
- getDeclaringClass( ) : 열거형의 Class 객체를 반환한다.
- values( ) : 열거형의 모든 상수를 배열에 담아 반환한다.
name 과 toString의 차이는 Override 가 가능한지 의 차이다. name은 불가능!
11-3. java.lang.Enum
Enum 클래스는 모두 java 언어 열거타입의 상위 클래스이다. 따라서 단일 상속만 허용되는 자바이기에 enum은 별도의 상속을 받을 수 없다.
11-4. EnumSet
열거형 타입과 함께 사용하기 위한 특별한 Set 구현체이다. EnumSet은 비트연산을 이용해 메모리 공간도 적게 차지하고, 속도도 빠르다. 또한, Set 기반이지만 enum과 static 타입의 메소드들로 구성되어 있어, 안정성을 최대한 추구하면서도 편리한 사용이 가능하다.
주의사항
생성자 오버라이딩이 불가능하고 동일한 타입의 열거 상수만 선언 가능.
null 값을 넣거나 NullPointerException을 던질 수 없다.
스레드로부터 안전하지 않으므로 필요한 경우 외부에서 동기화 해야한다.
상수는 열거 형에 선언 된 순서에 따라 저장된다.(ordinal 변수)
복사본에서는 Fail-Safe 방식의 Iterator를 사용한다.
allOf(Class elementType): 지정한 Type의 모든 원소를 포함하는 EnumSet을 만든다.
clone() : 이 집합의 복사본을 반환한다.
complementOf(EnumSet s) : 지정한 EnumSet에 포함되지 않은 원소만 갖는 동일한 Type의 EnumSet을 만든다.
copyOf(Collection c) : 지정한 Collection에서 초기화된 EnumSet을 만든다.
copyOf(EnumSet s) : 지정한 EnumSet과 동일한 Type을 가진 EnumSet을 만든다. 이 때, 처음과 동일한 원소(원소가 있는 경우)를 포함한다.
noneOf(Class elementType) : 지정한 Type을 가지는 빈 EnumSet을 만든다.
of(E e), of(E first, E… rest), of(E e1, E e2) : 지정한 원소(또는 원소들)를 포함하는 EnumSet을 만든다.
range(E from, E to) : 지정된 두 원소 사이에 있는 모든 원소를 포함하는 EnumSet을 만든다.
Reference
wisdom-and-record.tistory.com/52
yadon079.github.io/2021/java%20study%20halle/week-11
'Java > [Whiteship]자바스터디' 카테고리의 다른 글
13주차 과제 : I/O (0) | 2021.03.29 |
---|---|
12주차 과제 : 애노테이션 (0) | 2021.03.01 |
10주차 과제 : 멀티쓰레드 프로그래밍 (0) | 2021.01.27 |
9주차 과제 : 예외 (0) | 2021.01.21 |
8주차 과제 : 인터페이스 (0) | 2021.01.19 |