열거형은 관련이 있는 상수들의 집합
- 인터페이스나 클래스 내에 선언해서 관리하던 상수들을 열거형에서 관리
열거형 특징
- 서로 관련있는 상수 값들을 모아서 관리
- 열거형은 Class처럼 사용할 수 있음, Class의 문법을 따름
- 상속X
- 생성자는 묵시적으로 private (public으로 하면 컴파일에러)
- 열거형은 static변수 처럼 클래스 로드 시점에 생성되는 것으로 그 이후에 맘대로 생성해서 사용할 수 없음
- 열거형을 만들면 클래스 로드 시점에 하나의 인스턴스로 생성되서 singletone으로 관리됨 > 병렬환경
- 열거형 사용시 코드 리팩토링이 수월함, 상수들을 열거형에서만 관리하므로 열거형 코드만 수정하면 됨
enum 열거형이름 { 상수명1, 상수명2, .... }
열거형에 정의된 상수를 사용하려면 '열거형이름.상수명' 으로 사용
values() : 열거형의 모든 상수를 반환
Direction[] dArr = Direction.values();
String name() : 열거형 상수의 이름을 문자열로 반환
int ordinal() : 열거형 상수가 정의된 순서를 반환 (0부터 시작)
valueOf(Class enumType, String name) : 지정한 열거형(enumType)에서 name과 일치하는 열거형 상수를 반환
valueOf()
valurOf(String name)
멤버 추가
- ordinal()을 사용하면 상수가 정의된 순서에 따라 int값을 반환하지만, 이 값을 상수의 값으로 사용하는 것은 지양
- 각 상수 값을 지정할 수 있음
- 지정된 값을 저장할 수 있는 열거형의 인스턴스 변수와 생성자를 만들어 줘야함
- 인스턴스 변수는 열거형 상수의 값을 저장하기 때문에 final로 선언
- 생성자의 제어자는 묵시적으로 private임
enum Direction {
EAST(1), SOUTH(5), WEST(-1), NORTH(10);
private final int value;
Direction(int value) {this.value = value;} // 묵시적으로 private Direction
public int getValue(){
return value;
}
}
package enumenum;
enum Direction {
EAST(1, ">"), SOUTH(2, "V"), WEST(3, "<"), NORTH(4, "^");
private final int value;
private final String symbol;
private static final Direction[] DIR_ARR = Direction.values();
Direction (int value, String symbol){
this.value = value;
this.symbol= symbol;
}
public int getValue() {
return value;
}
public String getSymbol() {
return symbol;
}
public static Direction of(int dir) {
if(dir < 1 || dir > 4) {
System.out.println("Ivalid value : " + dir);
}
return DIR_ARR[dir - 1];
}
public Direction rotate(int num) {
num = num % 4;
return DIR_ARR[(value - 1 + num) % 4];
}
public String toString() {
return name() + getSymbol();
}
}
public class EnumEx {
public static void main(String[] args) {
for(Direction d : Direction.values()) {
System.out.printf("%s=%d%n", d.name(), d.getValue());
}
Direction d1 = Direction.EAST;
Direction d2 = Direction.of(1);
System.out.printf("d1=%s, %d%n", d1.name(), d1.getValue());
System.out.printf("d2=%s, %d%n", d2.name(), d2.getValue());
System.out.println(Direction.EAST.rotate(1));
System.out.println(Direction.EAST.rotate(2));
}
}
EAST=1
SOUTH=2
WEST=3
NORTH=4
d1=EAST, 1
d2=EAST, 1
SOUTHV
WEST<
참고
velog.io/@kyle/%EC%9E%90%EB%B0%94-Enum-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9
'JAVA > java' 카테고리의 다른 글
형변환 (0) | 2021.02.28 |
---|---|
Comparator, Comparable (0) | 2021.02.28 |
mutable과 immutable (0) | 2021.02.25 |
Java 날짜 유효성(포멧) 체크 (1) | 2020.07.14 |
toString() (0) | 2020.04.20 |