
class Card{
static final int CLOVER = 0;
static final int HEART = 1;
static final int DIAMOND = 2;
static final int SPADE = 3;
static final int TWO = 0;
static final int THREE = 1;
static final int FOUR = 2;
final int kind;
final int num;
}
class Card{
enum Kind {CLOVER,HEART,DIAMOND,SPADE} //열거형 Kind를 정의
enum Value {TWO,THREE,FOUR} //열거형 Value를 정의
final Kind kind;
final Value value;
}
if(Card.COVER == Card.TWO) >> ture이지만 False여야 의미상 맞음
if(CARD.Kind.CLOVER == Card.Value.TWO >> 컴파일 에러. 타입이 달라서 비교 불가
enum Direction {EAST, SOUT, WEST, NORTH}
`enum 열거형 이름 {상수명1, 상수명2,...}
class Unit {
int x, y;
Direction dir; //저 네가지 값 중에 하나만 들어올 수 있음
coid init() {
dir = Direction.EAST;
}
}
if(dir == Direction.EAST) {
x++;} else if (dir>= Direction.WEST) {
} >>❌ ERROR! 열거형 상수에 비교연산자 사용 불가
else if (dir.compareTO(DIrection.WEST) > 0) {
} >>⭕ compareTo 비교연산자는 사용 가능
! compareTo :
왼쪽이 크면 양수 / 오른쪽이 크면 음수 / 같으면 0 반환

static E[] values()
static E valuesOf(String name)
Direction[] dArr= Direction.values();
for(Direction d : dArr)
System.out.printf("%s=%d%n", d.name(), d.ordinal());
Direction d = Direction.valueOf("WEST");
enum Direction {EAST, SOUTH, WEST,NORTH }
public class EnumEx {
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.equals(d3) ? " + d1.equals(d3)); //true
//객체이기 때문에 산술연산자 사용 불가❌
System.out.println("d2 > d3 ? "+ (d1 > d3)); //Error
}
}
System.out.println("d1.CompareTo(d2) ? " + (EAST.compareTo(WEST)));
>> 결과 = -2;

switch(d1) {
case EAST : >>❌ Direction.EAST라고 쓸 수 없다
System.out.println("EAST"); break;
case WEST :
System.out.println("WEST"); break;
case SOUTH :
System.out.println("SOUTH"); break;
}
Direction[] dArr = Direction.values();
for (Direction d : Arr)
System.out.printf("%s=%d%n", d.name(), d.ordinal());
ordinal : 해당 상수가 가진 순서를 반환.
name : 값을 반환

enum Direction {EAST(1), SOUTH(5),WEST(-1), NORTH(10)}
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;}
}
private이므로, 외부에서 객체 생성 불가Direction d = new Direction(1);
enum Direction {
EAST(1, ">"), SOUTH(5,"V"), WEST(-1,"<"), NORTH(10,"^"); //끝에 ;를 추가해야한다.
private static final Direction[] DIR_ARR = Direction.values(); //이거는 남궁쌤이 넣은 거.
private final int value; //상수 선언
private final String symbol; //상수 선언
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)
throw new IllegalArgumentException("Invalid value :" + dir);
return DIR_ARR[dir -1];
}
}
enum Direction {
EAST(1, ">"), SOUTH(5,"V"), WEST(-1,"<"), NORTH(10,"^"); //끝에 ;를 추가해야한다.
private static final Direction[] DIR_ARR = Direction.values(); //이거는 남궁쌤이 넣은 거.
private final int value; //상수 선언
private final String symbol; //상수 선언
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)
throw new IllegalArgumentException("Invalid value :" + dir);
return DIR_ARR[dir -1];
}
public Direction rotate(int num) {
num = num %4;
if(num<0) num +=4;
return DIR_ARR[(value -1+num) %4];
}
}
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);
}
}
시계방향

너무 어렵다 하지 마시고 나중에 실무에 쓰다 모르면 다시 참고하세요.