♨학습내용
더보기
☞ enum 정의하는 방법
☞ enum이 제공하는 메소드 (values()와 valueOf())
☞ java.lang.Enum
☞ EnumSet
- enum 정의하는 방법
- 값 뿐만 아니라 타입까지 관리한다.
- 열거형 상수간의 비교는 '==' 사용이 가능하다.
- 비교연산자 '<', '>' 는 사용할 수 없고, compareTo()는 사용이 가능하다.
- enum 정의
- {}안에 상수의 이름을 나열하면 된다.
enum 열거형이름 {
상수명1, 상수명2, 상수명n
}
enum Food{
HAMBURGER, PIZZA;
}
- 가장 먼저 선언한 값은 상수0 값을 가지고 순서대로 1씩 증가한다.
- 열거체의 상수값을 문자열과 함께 사용할 수 있다.
enum Food{
HAMBURGER("햄버거"),
PIZZA("피자");
private final String name;
Food(String name){
this.name= name;
}
public String getName(){
return this.name;
}
}
- enum이 제공하는 메소드 (values()와 valueOf())
- 자바의 enum은 기본적으로 제공되는 메서드가 있다.
메서드 | 설명 |
toString() | 해당 상수의 이름을 문자열로 반환한다. |
name() | 해당 상수의 이름을 문자열로 반환한다. |
compareTo() | 정렬의 기준을 위한 메서드이다. 비교 대상보다 순서가 빠르면 -1, 같으면 0, 느리면 1을 반환한다 정렬 순서는 상수가 선언된 순서가 디폴트로 지정되어 있다. |
ordinal() | 상수의 선언 순서에 따른 인덱스 (Zero based) 값을 반환한다. Enum 안에는 private final int ordinal; 이 정의되어 있고 이를 사용한다. |
values() | 선언된 모든 Enum 값을 순서대로 배열에 담아서 반환한다. |
valueOf() | 인자로 받은 이름과 같은 Enum 값으로 반환한다. |
- values()
- 열거형의 모든 상수를 배열에 담아 반환한다.
Direction[] arr = Direction.values();
- valueOf()
- 열거형 상수의 이름으로 문자열 상수에 대한 참조를 얻을 수 있게 해준다.
Direction dirction = Direction.valueOf("SOUTH");
Direction.SOUTH == Direction.valueOf("SOUTH"); // true를 반환한다.
- java.lang.Enum
- Enum 클래스는 모든 자바 열거체의 공통된 조상 클래스로 Enum 클래스에는 열거체를 조작하기 위한 다양한 메소드가 존재한다.
- 대표적인 Enum 클래스의 메소드는 다음과 같다.
메서드 | 설명 |
static E values() | 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환한다. |
static E valueOf(String name) | 전달된 문자열과 일치하는 해당 열거체의 상수를 반환한다. |
protected void finalize() | 해당 Enum 클래스가 final 메서드를 가질 수 없는 상태를 말한다. |
String name() | 해당 열거체 상수의 이름을 반환한다. |
int ordinal() | 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환한다. |
- EnumSet
- 자바의 EnumSet은 Set 인터페이스를 기반으로 하면서 Enum 클래스의 상수로 구현된 것이다.
- 여기서 Set 인터페이스란 데이터를 중복으로 저장할 수 없고 순서가 보장되지 않는 자료구조를 말한다.
- 모든 요소는 단일 열거형 타입이여야 한며 null은 허용되지 않는다.
메서드 | 설명 |
copyOf(EnumSet s) | 매개변수로 들어온 EnumSet을 복사한다. |
nonOf(Class elementType) | 빈 EnumSet을 반환한다. |
of(E e1, E e2) | 열거형 상수 2개를 입력받아 새로운 EnumSet에 넣어 반환한다. |
complementOf(EnumSet s) | 매개변수에 들어온 EnumSet의 열거형 상수들을 제외한 열거형 상수들을 새로운 EnumSet에 넣어 반환한다. |
range(E from, E to) | 인자로 받은 열거형 상수 사이의 범위를 인덱스의 순서대로 새로운 EnumSet에 넣어 반환한다. 단 앞선 매개변수의 인덱스가 빠르면 런타임에 에러가 발생한다. |
동기식으로 사용할 필요가 있으면 Collections.synchronizedSet을 사용한다. |
'Study > Java_study' 카테고리의 다른 글
Java_study_13 (I/O) (0) | 2021.09.20 |
---|---|
Java_study_12 (애노테이션) (0) | 2021.09.14 |
Java_study_10 (멀티쓰레드 프로그래밍) (0) | 2021.08.30 |
Java_study_9 (예외처리) (0) | 2021.08.23 |
Java_study_8 (인터페이스) (0) | 2021.08.17 |