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 |