다연이네

[days24] 열거형(enums) 본문

Java

[days24] 열거형(enums)

 다연  2020. 10. 23. 22:31
반응형

열거형

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

클래스 안/밖에 선언 가능, 또다른 클래스 만드는 것도 가능

enum Direction{ EAST, SOUTH, WEST, NORTH } //열거형 
	
	class Unit{
		int x, y;
		Direction dir; 
		
		void init() {
			dir= Direction.EAST;
		}
		void move() {
			switch (dir) {
			case EAST:
				break;
			case WEST:
				break;
			case NORTH:
				break;
			default:
				break;
			}
		}
		
	}
package days24;

public class Ex07 {

   public static void main(String[] args) {
      
      Direction dir;
      // Enum 클래스 안의 메소드 dir.name();
      //열거형을 선언하면 부모는 java.lang.Enum
      
      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("d1 > 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."); //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) {
         System.out.printf("%s=%d%n", d.name(), d.ordinal()); //EAST=0
      }
      

   }

}

만약 enum이 없다면 ?

class Direc{
static final Direc EAST = new Direc(1); //자기자신의 상수 객체
static final Direc SOUTH = new Direc(1);
static final Direc WEST = new Direc(1);
static final Direc NORTH = new Direc(1);

 

열거형에 멤버 추가하기

Enum() 클래스에 정의된 ordinal()이 열거형 상수가 정의된 순서를 반환 (0,1,2...)하지만, 이 값을 열거형 상수의 값으로 사용하지 않는 것이 좋다. 이 값은 내부적인 용도로만 사용되기 위한 것이다.

열거형 상수의 값이 불연속적인 경우에는 열거형 상수 이름 옆에 원하는 값을 괄호로 넣어준다.

enum Direction3 {  EAST(1), SOUTH(5), WEST(-1), NORTH(11);   }

Enum()은 내부적으로 클래스로 컴파일되어지기 때문에 Direction에 int값을 넘겨받는 생성자가 있어야 한다.

public class Ex08 {

	public static void main(String[] args) {
		Direction3 d = Direction3.NORTH;
		System.out.println(d.getValue());

	}

}

enum Direction3 { 
	EAST(1), SOUTH(5), WEST(-1), NORTH(11); 
	private final int value; 

	public int getValue() { // private 값을 돌려줄 get함수
		return this.value;
	}
	Direction3(int value) { 
		//접근지정자는 오직private,  생략도 가능(생략해도 디폴트가 아닌 private이다)
		this.value = value; // 상수는 반드시 최소 한번은 초기화 해야함
	}
}
반응형

'Java' 카테고리의 다른 글

[days24] Annotation  (0) 2020.10.23
[문제] 열거형 활용 예제  (0) 2020.10.23
[days24] Generics  (0) 2020.10.23
[days23] 컬렉션 클래스 - Properties  (0) 2020.10.21
[days23] 컬렉션클래스<Map> - TreeMap  (0) 2020.10.21
Comments