enum은 클래스이므로 생성자를 가질 수 있다. 그러나 enum의 생성자는 접근 제어자 private만을 허용한다. 이때 방식이 좀 특이한데 아래 코드를 살펴보자.
package org.opentutorials.javatutorials.constant2;
enum Fruit{
APPLE("red"), PEACH("pink"), BANANA("yellow");
public String color;
Fruit(String color){
System.out.println("Call Constructor "+this);
this.color = color;
}
}
enum Company{
GOOGLE, APPLE, ORACLE;
}
public class ConstantDemo {
public static void main(String[] args) {
/*
if(Fruit.APPLE == Company.APPLE){
System.out.println("과일 애플과 회사 애플이 같다.");
}
*/
Fruit type = Fruit.APPLE;
switch(type){
case APPLE:
System.out.println(57+" kcal, "+Fruit.APPLE.color);
break;
case PEACH:
System.out.println(34+" kcal"+Fruit.PEACH.color);
break;
case BANANA:
System.out.println(93+" kcal"+Fruit.BANANA.color);
break;
}
}
}
또한 열거형은 메소드를 가질 수 도 있다.
아래 코드는 위의 코드와 다르지만 동일한 결과를 출력한다.
package org.opentutorials.javatutorials.constant2;
enum Fruit{
APPLE("red"), PEACH("pink"), BANANA("yellow");
private String color;
Fruit(String color){
System.out.println("Call Constructor "+this);
this.color = color;
}
String getColor(){
return this.color;
}
}
enum Company{
GOOGLE, APPLE, ORACLE;
}
public class ConstantDemo {
public static void main(String[] args) {
Fruit type = Fruit.APPLE;
switch(type){
case APPLE:
System.out.println(57+" kcal, "+Fruit.APPLE.getColor());
break;
case PEACH:
System.out.println(34+" kcal"+Fruit.PEACH.getColor());
break;
case BANANA:
System.out.println(93+" kcal"+Fruit.BANANA.getColor());
break;
}
}
}
그리고 enum은 멤버 전체를 열거 할 수 있는 기능도 제공한다.
package org.opentutorials.javatutorials.constant2;
enum Fruit{
APPLE("red"), PEACH("pink"), BANANA("yellow");
private String color;
Fruit(String color){
System.out.println("Call Constructor "+this);
this.color = color;
}
String getColor(){
return this.color;
}
}
enum Company{
GOOGLE, APPLE, ORACLE;
}
public class ConstantDemo {
public static void main(String[] args) {
for(Fruit f : Fruit.values()){
System.out.println(f+", "+f.getColor());
}
}
}
열거형은 연관된 값들을 저장한다. 또 그 값들이 변경되지 않도록 보장한다. 뿐만 아니라 열거형 자체가 클래스이기 때문에 열거형 내부에 생성자, 필드, 메소드를 가질 수 있어서 단순히 상수가 아니라 더 많은 역할을 할 수 있다.