enum 타입이란?

  • 변수가 미리 정의된 상수 세트가 될 수 있도록 하는 특수 데이터 유형(특수한 형태의 class)이다.
  • 열거형은 enum 키워드를 사용하여 정의한다.
  • new를 사용하여 객체를 생성할 수 없다.
package ex0727;

public class Ex06 {
	public static void main(String[] args) {
		// 열거형 상수의 기수(선언 위치) 출력
		for(Color c : Color.values()) {
			System.out.println(c+" -> " + c.ordinal());
		}
		// System.out.println(Color.RED == 0); // 컴파일 오류. C언어는 0임 (True)
		System.out.println();
		
		
		Test6 ob = new Test6();
		System.out.println(ob.getColor()); // RED 출력
		
		ob.setColor(Color.BLUE);
		Color color = ob.getColor();
		
		// case에서는 enum은 enum명 생략 가능(Color 생략 가능)
		switch(color) {
		case RED : System.out.println("red"); break;
		case GREEN : System.out.println("greed"); break;
		case BLUE : System.out.println("blue"); break;
		}
	}
}

enum Color {
	RED, GREEN, BLUE
}	

class Test6 {
	private Color color = Color.RED;
	
	public void setColor(Color color) {
		this.color = color;
	}
	
	public Color getColor() {
		return color;
	}
}

ordinal 이란 메소드는 열거형에 있는 값들을 순서대로 return해준다. 여기에서 RED가 0 이라고 반환했지만 0과 같지는 않다. 

package ex0727;

public class Ex07 {
	public static void main(String[] args) {
		System.out.println(City.SEOUL);
		// toString() 이 재정의 되어 있지 않으면 SEOUL 출력
		System.out.println("서울 : "+City.SEOUL.getCount());
		
		System.out.println("\n전체 리스트...");
		for(City c : City.values()){
			System.out.println(c.getName()+" : "+c.getCount());
		}
		
	}
}

// 열거형 상수에 값 할당 - 생성자를 만들어야 함
enum City {
	SEOUL("서울", 1000),
	BUSAN("부산", 350),
	INCHEON("인천", 330);
	
	private String name;
	private int count;
	
	// 생성자는 private만 가능. 생략해도 private
	private City(String name, int count) {
		this.name = name;
		this.count = count;
	}

	public String getName() {
		return name;
	}

	public int getCount() {
		return count;
	}
	
	@Override
	public String toString() {
		return this.name +"  인구 : "+this.count+"만명";
	}
}

package ex0727;

public class Ex08 {
	public static void main(String[] args) {
		double a;
		
		a = Operation.PLUS.eval(10, 5);
		System.out.println(a);
		
		double x = 10, y = 5;
		for(Operation op : Operation.values()) {
			System.out.printf("%.1f %s %.1f = %.1f\n", x, op, y, op.eval(x, y));
		}

	}
}

// 열거형 상수 - 메소드 정의. 추상 메소드가 선언되어야 함.
enum Operation {
	// 재정의 하는 꼴!
	PLUS { public double eval(double x, double y) {return x + y; } },
	MINUS { public double eval(double x, double y) {return x - y; } },
	TIMES { public double eval(double x, double y) {return x * y; } },
	DIVIDE { public double eval(double x, double y) {return x / y; } };
	
	public abstract double eval(double x, double y); // 이게 꼭 있어야 함!
}

 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0728_Ex01~Ex03_exception : 예외처리  (0) 2021.07.29
0727_패키지  (0) 2021.07.27
0727_Ex05_중첩 인터페이스  (0) 2021.07.27
0727_Ex03_anonymous class : 익명클래스  (0) 2021.07.27
0727_Ex01~Ex02_중첩 클래스  (0) 2021.07.27

+ Recent posts