시소당
열거형 상수 (enum 타입) 정의 예제
파일명: Foo.java
public class Foo {
enum Week { 월, 화, 수, 목, 금, 토, 일 } // 끝에 세미콜론(;)을 붙이지 않음
enum RGB { red, green, blue }
public static void main(String args []) {
// Week 이라는 새로운 자료형으로 Day 라는 변수를 만들어, "금"을 대입.
Week Day = Week.금;
System.out.println(Day + "요일"); // 출력 결과: 금요일
System.out.println(RGB.blue); // 출력 결과: blue
System.out.println(Week.토); // 출력 결과: 토
Day = Week.일;
System.out.println(Day); // 출력 결과: 일
}
}
열거형 상수 즉 Enumeration 이란, 미리 정해진 일정한 값을 가진 새로운 자료형을 사용자가 직접 만드는 것입니다.
문자열로 정의되어 있지만 내부적으로는 정수로 취급되기에, 일반 배열로 처리할 때보다 속도가 빠릅니다.
가령 일주일은 7개의 요일만 있고, 빛의 삼원색 (RGB) 은 3가지의 색으로만 이루어져 있기에, 이런 데이터를 다룰 때에는 열거형 상수로 정의하여 사용하면 이상적입니다.
상수이기에
Week.토 = Week.일;
이런 대입은 안됩니다. 그러면 Foo.java:12: cannot assign a value to final variable 토 이런 에러가 납니다.
enum 은 반드시 메소드 외부에서 정의해야 합니다. 그렇지 않으면 Foo.java:5: enum types must not be local 이런 에러가 납니다.
자바 버전 5.0 (=1.5) 이상에서만 Enumeration 이 지원됩니다.
루프문에서 enum 타입의 요소에 쉽게 접근하는 방법이 여기에 있습니다:
인덱스를 사용하여 직접 억세스하지 않고, 배열 요소의 개수에 딱 맞게 루프를 돌리는 작업을 하는 것입니다. 그래서 배열 요소의 개수를 몰라도 간단히 for루프를 돌릴 수 있습니다.
배열뿐 아니라 enum 타입에도 적용이 됩니다. 그렇지만 foreach 라는 예약어가 있는 것은 아니고, for문의 구조를 약간 변형하여 사용합니다.
for문(for each문) 예제
파일명: Foo.java
public class Foo {
enum Week { 월, 화, 수, 목, 금, 토, 일 }
public static void main(String args []) {
// enum 타입을 foreach 로 출력
for (Week day : Week.values()) { // Week.values()에는 Week 의 값들이 교대로 들어갑니다.
System.out.println(day + "요일");
}
// 정수 배열을 foreach 로 출력
int[] num = { 14, 54, 52, 26, 62, 55 };
for (int i : num)
System.out.println(i);
// 문자열 배열을 foreach 로 출력
String names[] = { "맹구", "배용준", "땡칠이", "장동건", "강수정", "송창식", "황당해", "고은아" };
for (String s : names)
System.out.println(s);
}
}