본문 바로가기
Language/java

[Java] 열거형_열거형의 이해

by gamxong 2022. 7. 30.

열거형의 이해

 

enum Direction { EAST, SOUTH, WEST, NORTH }

★ 열거형 상수 하나하나가 Direction객체이다. 위의 문장을 클래스로 정의한다면

class Direction {
    static final Direction EAST = new Direction("EAST");
    static final Direction SOUTH = new Direction("SOUTH");
    static final Direction WEST = new Direction("WEST");
    static final Direction NORTH = new Direction("NORTH");
    
    private String name;
    
    private Direction(String name) {
    	this.name = name;
    }
}

 

 

★ 모든 열거형은 추상 클래스 Enum의 자손이므로, Enum을 흉내 내어 MyEnum을 작성해보자

 

abstract class MyEnum<T extends MyEnum<T>> implements Comparable<T> {
	static int id = 0;  // 객체에 붙일 일련번호(0부터 시작)
    
    int ordinal;
    String name = "";
    
    MyEnum(String name) {
    	this.name = name;
        ordinal = id++;
    }
    
    public int compareTo(T t) {
    	return ordinal - t.ordinal();
    }
}

★ MyEnum<T extends<MyEnum<T>> 선언 : 타입 T가 MyEnum<T>의 자손이어야 한다는 의미

   ▶ 타입 T가 MyEnum의 자손이므로 ordinal()이 정의되어 있는 것은 분명하므로 형변환 없이도 에러 나지 않음

댓글