Enum 타입이란?
- 변수를 미리 정의된 상수가 되도록 해주는 특별한 타입
- 변수는 항상 미리 정의한 값들중 하나여야한다.
- ex) NORTH,SOUTH,EAST,WEST
- 상수이므로 이넘 타입의 필드들은 대문자이다.
- enum 키워드를 사용해 enum 타입을 정의한다
자바에서 enum 타입은 여러 기능 제공
- enum 선언으로 class를 정의하는데 class body는 메소드와 다른 필드들을 포함할 수 있다.
- enum을 생성할때 컴파일러가 몇개의 특별한 메소드를 자동적으로 추가한다.
- 예를들어 static values 메소드를 자동적으로 추가한다.
- enum의 값들을 선언한 순서대로 담은 배열을 반환하는 기능
- 이 메소드는 보통 for-each를 생성해 enum 타입의 값들을 iterate할때 사용
- ex) for (Planet p : Planet.values()){...}
특징
- 모든 enum들은 java.lang.Enum을 암시적으로 상속받아 다른 클래스 상속 받을 수 없다.
- enum 상수를 어떤 값으로 선언하면 이 값들은 enum 상수가 생성될때 생성자로 전달된다.
- 필드와 메소드가 존재하면 enum 상수의 마지막은 세미콜론으로 끝나야 한다.
- enum 타입의 생성자는 항상 package-private(아무것도 안붙인것) 이거나 private 접근자여야 한다.
- 생성자는 상수들을 자동적으로 생성하므로 직접 생성자를 호출하면 안된다.
예시 코드
enum Man {
BILLY (160,60),
TOM (190,100),
BRUCE (163,80),
TIM (174,70);
private final int height;
private final int weight;
public int getHeight(){return height;}
public int getWeight(){return weight;}
Man(int height, int weight) {
this.height = height;
this.weight = weight;
}
}
public class Test {
public static void main(String[] args) {
for(Man man : Man.values()){
System.out.println(man.name()+ " "+man.getHeight()+ " "+ man.getWeight());
}
}
}
결과 :
BILLY 160 60
TOM 190 100
BRUCE 163 80
TIM 174 70