이 글은 GeeksforGeeks의 enum in Java를 참조하여 쓴 글입니다.
Enumeration은 프로그래밍언어에서 상수의 그룹을 나타낼 때 사용한다.
Enum은 컴파일 당시 우리가 모든 가능한 값을 알고있는 경우 사용된다. 항상 enum안의 상수는 타입이 정해져 있어야 되는 것은 아니다.
Java 1.5버전 부터, enum은 enum 데이터 타입이라고 표시되었다. 자바 enum은 C/C++ enum보다 더 강력한 기능을 제공한다. 자바에서 변수, 메소드 그리고 생성자를 추가할 수 있다. enum의 주된 목적은 우리만의 데이터 타입을 가지기 위해서이다. (Enumberated Data Type)
enum Color {
RED, GREEN, BLUE
}
아래와 같이 호출하여 사용할 수 있고 값은 RED가 된다.
Color color = Color.RED;
자바 네이밍 컨벤션
/* 내부적으로 위의 enum은 아래처럼 바뀐다.
class Color
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color GREEN = new Color();
}*/
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY;
}
public class Test {
Day day;
public Test(Day day) { this.day = day; }
public void dayIsLike() {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
break;
}
}
public static void main(String[] args)
{
String str = "MONDAY";
Test t1 = new Test(Day.valueOf(str));
t1.dayIsLike();
}
}
결과는 아래와 같이 나온다
Mondays are bad.
enum Color {
RED, GREEN, BLUE;
// Driver method
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
결과는 아래와 같이 나온다.
RED
enum Color {
RED, GREEN, BLUE;
}
public class Test
{
public static void main(String[] args)
{
Color arr[] = Color.values();
for (Color col : arr) {
System.out.println(col + " at index " + col.ordinal());
}
System.out.println(Color.valueOf("RED"));
}
}
결과는 아래와 같다.
RED at index 0
GREEN at index 1
BLUE at index 2
RED
메소드 | 역할 |
---|---|
values() | 모든 상수 반환 |
ordinal() | 상수 인덱스 반환 |
valueOf() | 상수 문자 값 반환 |
enum Color
{
RED, GREEN, BLUE;
private Color()
{
System.out.println("Constructor called for : " + this.toString());
}
public void colorInfo()
{
System.out.println("Universal Color");
}
}
public class Test
{
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
c1.colorInfo();
}
}
Output:
결과는 아래와 같이 나온다.
Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color
enum Color {
RED, GREEN, BLUE
}
Color color = Color.RED;
class Color
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color GREEN = new Color();
}*/
메소드 | 역할 |
---|---|
values() | 모든 상수 반환 |
ordinal() | 상수 인덱스 반환 |
valueOf() | 상수 문자 값 반환 |