enum 정리(자바의 정석)

2023. 5. 21. 17:08자바

enum이란 관련된 상수들을 묶어 놓은 것을 말한다.

 

 

 

 

enum Direction { EAST, SOUTH, WEST, NORTH }

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");

        System.out.println("d1="+d1);   //d1=EAST
        System.out.println("d2="+d2);   //d2=WEST
        System.out.println("d3="+d3);   //d3=EAST

        System.out.println("d1==d2 ? "+ (d1==d2));  // d1==d2 ? false
        System.out.println("d1==d3 ? "+ (d1==d3));  // d1==d3 ? true
        System.out.println("d1.equals(d3) ? "+ d1.equals(d3));  // d1.equals(d3) ? true
//    System.out.println("d2 > d3 ? "+ (d1 > d3)); // 에러
        System.out.println("d1.compareTo(d3) ? "+ (d1.compareTo(d3))); // d1.compareTo(d3) ? 0
        System.out.println("d1.compareTo(d2) ? "+ (d1.compareTo(d2)));  // d1.compareTo(d2) ? -2

        switch(d1) {
            case EAST: // 출력
                System.out.println("The direction is EAST."); break;
            case SOUTH:
                System.out.println("The direction is SOUTH."); break;
            case WEST:
                System.out.println("The direction is WEST."); break;
            case NORTH:
                System.out.println("The direction is NORTH."); break;
            default:
                System.out.println("Invalid direction."); break;
        }

        Direction[] dArr = Direction.values();

        for(Direction d : dArr)  // for(Direction d : Direction.values())
            System.out.printf("%s=%d%n", d.name(), d.ordinal());

        /*
        EAST=0
        SOUTH=1
        WEST=2
        NORTH=3
        */
    }
}

 

 

 

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) { // 접근 제어자 private이 생략됨
        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];
    }

    // 방향을 회전시키는 메서드. num의 값만큼 90도씩 시계방향으로 회전한다.
    public Direction2 rotate(int num) {
        num = num % 4;

        if(num < 0) num +=4; // num이 음수일 때는 시계반대 방향으로 회전

        return DIR_ARR[(value-1+num) % 4];
    }

    public String toString() {
        // name()은 enum의 명, getSymbol()은 enum의 symbol값
        return name()+getSymbol();
    }
} // enum Direction2

class Ex12_6 {
    public static void main(String[] args) {
        for(Direction2 d : Direction2.values())
            System.out.printf("%s=%d%n", d.name(), d.getValue());

        /*
        EAST=1
        SOUTH=2
        WEST=3
        NORTH=4
        */

        Direction2 d1 = Direction2.EAST;
        Direction2 d2 = Direction2.of(1);

        System.out.printf("d1=%s, %d%n", d1.name(), d1.getValue()); //d1=EAST, 1
        System.out.printf("d2=%s, %d%n", d2.name(), d2.getValue()); //d2=EAST, 1
        System.out.println(Direction2.EAST.rotate(1).toString());  // SOUTHV
        System.out.println(Direction2.EAST.rotate(2));  // WEST<
        System.out.println(Direction2.EAST.rotate(-1)); // NORTH^
        System.out.println(Direction2.EAST.rotate(-2)); // WEST<
    }
}

 

 

'자바' 카테고리의 다른 글

자바 람다 정리(자바의 정석)  (0) 2023.05.29
어노테이션 정리(자바의 정석)  (0) 2023.05.22
제네릭 정리 (자바의 정석)  (0) 2023.05.20
컬렉션 - hashMap 정리  (0) 2023.05.17
자바 문자열  (0) 2023.04.25