JAVA/JAVA 기본정리

열거형(Enums)

hyun-1200 2022. 5. 30. 22:04

열거형 : 서로 관련된 상수를 편리하게 선언하기 위한 것 

 

열거형이란 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할때 사용하면 유용하다.

jdk 1.5부터 추가되었다.

 

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, HEAR, DIAMOND, SPACE } //열거형 Kind를 정의
    enum Value { TWO, THREE, FOUR } // 열거형 Value를 정의 
    
    final Kind kind;  // 타입이 int가 아닌 Kind임을 유의하자.
    final Value value; 
 }
  • '타입에 안전한 열거형' 이라서 실제 값이 같아도 타입이 다르면 컴파일 에러 발생
  • 열거형 상수를 사용하면, 기존의 소스를 다시 컴파일하지 않아도 된다. 

열거형 정의

enum 열거형 이름 {상수명1, 상수명2, ... } 

사용하는 방법 : 열거형이름.상수명 

ex. 

enum Direction { EAST , SOUTH, WEST, NORTH}


class Unit{
	int x,y;
    Direction dir;
    
    void init(){
    	dir= Direction.EAST;  // 사용법 : 열거형이름.상수명
        }
 }

 

  • 열거형 상수간의 비교에는 '==' 를 사용할 수 있다.
  • compareTo()도 사용가능하고, switch조건식에도 열거형을 사용할 수 있다. 

모든 열거형의 조상 - java.lang.Enum 

열거형 Direction에 정의된 모든 상수를 출력하려면, 아래와 같다.

Direction[] dArr= Direction.values(); 

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

 

 

values() 는 열거형의 모든 상수를 배열에 담아 반환한다. 

이 메서드는 모든 열거형이 가지고 있는 것으로 컴파일러가 자동으로 추가해 준다.

 

ordinal()은 모든 열거형의 조상인 java.lang.Enum클래스에 정의된 것으로, 열거형 상수가 정의된 순서(0부터 시작)를 정수로 반환한다. 

 

Class<E> getDeclaringClass() : 열거형의 Class 객체를 반환한다.

 

Sting name()  :  열거형 상수의 이름을 문자열로 반환한다.

T valueOf(Class<T> enumType, String name) : 지정된 열거형에서 name과 일치하는 열거형 상수를 반환한다. 

Direction d = Direction.valueOf("WEST"); 
System.out.println(d); // WEST