Enumeration [열거형]
- 그 값(종류)이 상당히 제한적이고 어플리케이션 실행 중 추가/삭제 될 일이 없어 고정적으로 사용하고자 하는 것들의 집합
- 협업하는 개발자들끼리의 원활한 소통을 가능케한다.실수를 줄이고 개발 속도를 빠르게 한다.
- 열거형도 객체이다.(Object타입으로 받을 수 있다.)
- 어떠한 열거형이 가지는 원소는 그 열거형 타입인 객체이다.
- Java에서 upperSnakeCase가 되는 경우는 정적인 상수만 가능하다.(즉 열거형도 정적인 상수라는 말이다.)

열거형을 나열한뒤 세미콜론(;)을 달게 되면 그 타입의 클래스 부분이라고 생각하면 된다. 이때 열거형의 생성자는 접근 제한자를 가지지 않는다.

위 사진에서 알 수 있든이 toString()을 재정의 하지 않으면 문자열로 입력한 값이 출력되지 않고 열거형의 값이 출력된다. toString() 의 return값을 this.name으로 작성함으로써 열거형의 전달인자 값이 출력되게 된다.
Enum클래스를 상속받는 Race클래스는 들어가보면 equals나 hashcode 생성자에 final이 붙어있다. 이말인 즉슨 재정의 할수 없다. 라는 뜻이다.(Enums에서만)

결과값으로는 사실상 toString()이 뒤에 붙은채로 출력되는것이다(기본값).
Race -> Enum -> Object 순으로 상속관계가 정리된다
만약 Race가 직접적으로 Object를 상속 받는 관계라면 주소값이 떠야 하지만 Enum을 상속받아서 Override시 toString만 사용가능하다