🌱 오늘의 주제 : 열거형(enum)
🌱 열거형(enum)
- 여러 상수를 선언해야 할 때 편리하게 선언 할 수 있는 방법
- 자동적으로 0부터 시작하는 정수값이 할당된다.
class Card {
enum Kind { CLOVER, HEART, DIAMOND, SPADE } // 열거형 kind를 정의
enum Value { TWO, THREE, FOUR } // 열거형 Value를 정의
final Kind kind; // 타입이 Int가 아닌 kind임에 유의하자.
final Value value;
}
🌱 열거형의 정의와 사용
enum 열거형이름 { 상수명1, 상수명2, .... }
enum Direction { EAST, SOUTH, WEST, NORTH }
class Unit {
int x, y;
Direction dir; // 열거형 인스턴스 변수를 선언
void init() {
dir = Direction.EAST; // 유닛의 방향을 EAST로 초기화
}
}
- 열거형 상수간의 비교는 '=='로 사용 가능하다. 즉, 빠른 성능을 제공한다는 얘기다.
- 그러나, '<' '>' 와 같은 비교연산자는 사용할 수 없고, compareTo()는 사용 가능하다.
🌱 열거형의 조상 - java.lang.Enum
- 모든 열거형의 조상은 java.lang.Enum이다.
메서드 | 설명 |
String name() | 열거형 상수의 이름을 문자열로 반환한다. |
int ordinal() | 열거형 상수가 정의된 순서를 반환한다.(0부터 시작) |
T valueOf(Class<T> enumType, String name) | 지정된 열거형에서 name과 일치하는 열거형 상수를 반환한다. |
🌱 열거형 예제
package chapter12;
enum Direction { EAST, SOUTH, WEST, NORTH }
public class Ex12_5 {
public static void main(String[] args) {
Direction d1 = Direction.EAST;
Direction d2 = Direction.valueOf("WEST"); // 값 얻어오기
Direction d3 = Enum.valueOf(Direction.class, "EAST"); // Enum은 모든 열거형의 최고 조상.
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3);
System.out.println("d1 == d2 " + (d1 == d2));
System.out.println("d1 == d3 " + (d1 == d3));
System.out.println("d1.equals(d3) " + (d1.equals(d3)));
// System.out.println("d1 > d2 " + (d1 > d2)); // 에러. 비교연산자 사용 불가.
System.out.println("d1.compareTo(d3) " + (d1.compareTo(d3)));
System.out.println("d1.compareTo(d2) " + (d1.compareTo(d2)));
Direction[] dArr = Direction.values(); // 모든 상수 출력
for(Direction d : dArr)
System.out.printf("%s=%d%n", d.name(), d.ordinal());
// 열거형 예제
} // main
}
-------
d1 = EAST
d2 = WEST
d3 = EAST
d1 == d2 false
d1 == d3 true
d1.equals(d3) true
d1.compareTo(d3) 0
d1.compareTo(d2) -2
EAST=0
SOUTH=1
WEST=2
NORTH=3
🌱 열거형에 멤버 추가하기
- 열거형 상수의 값이 불규칙인 경우에는 다음과 같이 이름 옆에 원하는 값을 넣어주면 된다.
enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10) }
- 지정된 값을 저장할 수 있는 인스턴스 변수와 생성자를 새로 추가해주어야 한다. 주의할 점은, 열거형 상수를 모두 정의한 다음 다른 멤버들을 추가해야 한다.
- 열거형의 객체를 생성할 수 없다. 열거형 생성자는 제어자가 묵시적으로 private이기 때문이다.
enum Direction {
EAST(1), SOUTH(5), WEST(-1), NORTH(10);
private final int value; // 정수를 저장할 인슨턴스 변수를 추가
Direction(int value) { this.value = value; }. // 생성자 추가
public int getValue() { return value;}
}
'Java' 카테고리의 다른 글
Java - 메타 애너테이션이란? (0) | 2023.03.14 |
---|---|
Java - 애너테이션이란? (0) | 2023.03.13 |
Java - 지네릭 메서드와 형변환 (2) | 2023.03.08 |
Java - 제한된 지네릭 클래스 & 와일드 카드 (0) | 2023.03.07 |
Java - 지네릭스(Generics) (0) | 2023.03.06 |