//열거형(enums)
- 관련된 상수들을 같이 묶어 놓은 것.
- Java는 값과 타입을 모두 체크함.
- 열거형 정의
enum 열거형명 { 상수명1, 상수명2, ... }
- 열거형 상수의 비교에 == | compareTo() 사용 가능 // < | > 와 같은 비교 연산자는 사용xx
// 0 1 2 3
enum Direction { EAST, SOUTH, WEST, NORTH }
public class Ex04 {
public static void main(String[] args) {
Direction d1 = Direction.EAST; //열거형타입.상수이름 // 가장 많이 사용
Direction d2 = Direction.valueOf("WEST");
Direction d3 = Enum.valueOf(Direction.class, "EAST");
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3 + "\n");
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.compareTo(d2) ? : " + (d1.compareTo(d2))); // 0 - 2 = -2
System.out.println("d1.compareTo(d3) ? : " + (d1.compareTo(d3)) + "\n"); // 0 - 0 = 0
switch(d1) {
case EAST:
System.out.println("d1 : The direction is EAST."); break;
case SOUTH:
System.out.println("d1 : The direction is SOUTH."); break;
case WEST:
System.out.println("d1 : The direction is WEST."); break;
case NORTH:
System.out.println("d1 : The direction is NORTH."); break;
default:
System.out.println("d1 : Invalid direction."); break;
} //end of d2 switch
switch(d2) {
case EAST:
System.out.println("d2 : The direction is EAST."); break;
case SOUTH:
System.out.println("d2 : The direction is SOUTH."); break;
case WEST:
System.out.println("d2 : The direction is WEST."); break;
case NORTH:
System.out.println("d2 : The direction is NORTH."); break;
default:
System.out.println("d2 : Invalid direction."); break;
} //end of d2 switch
System.out.println();
Direction[] dArr = Direction.values(); // 열거형의 모든 상수를 배열로 반환
for(Direction d : dArr) { // for(Direction d : Direction.values())
System.out.println(d.name() + " = " + d.ordinal());
}
}//end of main method
}//end of ex04 class
- 열거형 상수의 이름을 문자열로 반환
enum명.name();
- 열거형 상수가 정의된 순서 반환
enum명.ordinal();
- 지정된 열거형에서 name과 일치하는 열거형 상수 반환
enum명.valueOf([enumType], name);
package com.sorrel012.tips;
import java.util.Arrays;
enum Season {
Winter(1), Spring(2), Summer(3), Fall(4);
private int value;
private Season(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
public class EnumRunner {
public static void main(String[] args) {
Season season = Season.Winter;
System.out.println(season);
Season season1 = Season.valueOf("Spring");
System.out.println(season1);
System.out.println();
System.out.println("winter's index: " + season1.ordinal()); //enum에서 winter의 순서(index)
System.out.println("winter's value: " + season1.getValue()); //enum에서 winter에게 할당한 값
System.out.println("summer's index: " + Season.Summer.ordinal()); //enum에서 Fall의 순서(index)
System.out.println("summer's value: " + Season.Fall.getValue()); //enum에서 Fall의 순서(index)
System.out.println("enum: " + Arrays.toString(Season.values())); // enum의 모든 값 출력
} //main
}
// 열거형에 멤버 추가하기
- 불연속적인 열거형 상수의 경우, 원하는 값을 괄호 안에 적는다.
~ 괄호()를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야 한다.
~ 열거형의 생성자는 외부에서 호출 불가.(private)
enum Direction {
EAST(1), SOUTH(5), WEST(-1), NORTH(10);
private final int value; // 인스턴스 변수 추가
Direction(int value) { this.value = value; } // 생성자 추가(private 생략)
public int getValue() { return value; }
}
enum Direction2 {
EAST(1, ">"), SOUTH(2, "V"), WEST(3, "<"), NORTH(4, "^");
private static final Direction2[] DIR_ARR = Direction2.values();
private final int value;
private final String symbol;
Direction2(int value, String symbol) {
this.value = value;
this.symbol = symbol;
}
public int getValue() { return value; }
public String getSymbol() { return symbol; }
public static Direction2 of(int dir) {
if (dir < 1 || dir > 4) {
throw new IllegalArgumentException("Invalid value : " + dir);
}
return DIR_ARR[dir - 1];
}
public Direction2 rotate(int num) { //방위표 기준으로 시계방향으로 90*num 만큼 회전.
num = num % 4;
if(num < 0) { num += 4; }
return DIR_ARR[(value-1+num) % 4];
}
public String toString() {
return name() + getSymbol();
}
}// end of enum Direction2
public class Ex05 {
public static void main(String[] args) {
for (Direction2 d : Direction2.values()) {
System.out.println(d.name() + " = " + d.getValue());
} System.out.println();
Direction2 d1 = Direction2.EAST;
Direction2 d2 = Direction2.of(1);
System.out.println("d1 = " + d1.name() + ", " + d1.getValue());
System.out.println("d2 = " + d2.name() + ", " + d2.getValue() + "\n");
System.out.println(Direction2.EAST.rotate(1));
System.out.println(Direction2.EAST.rotate(2));
System.out.println(Direction2.EAST.rotate(-1));
System.out.println(Direction2.EAST.rotate(-2));
}
}
'자바(JAVA)' 카테고리의 다른 글
[자바(Java)] 쓰레드(Thread) (0) | 2022.12.18 |
---|---|
[자바(Java)] 애너테이션 (0) | 2022.12.17 |
[자바(Java)] 제네릭(Generics) (1) | 2022.12.17 |
[자바(Java)] Collections (0) | 2022.12.16 |
[자바(Java)] Set (0) | 2022.12.16 |