Dev./java
[Java] enum은 클래스다.
인쥭
2022. 3. 6. 03:24
반응형
public class Study {
public static void main(String[] args) {
for(Animals animal : Animals.values()) {
animal.greeting();
animal.move();
}
}
}
enum Animals {
HUMAN(1.11) {
@Override public void move() {
System.out.println("move with human");
}
},
BIRD(1, "Birdie"){
@Override public void move() {
System.out.println("fly with bird");
}
},
DOG(2, "Doggo"){
@Override public void move() {
System.out.println("move with dog");
}
},
CAT(3, "Catch"){
@Override public void move() {
System.out.println("move with cat");
}
};
private final int age;
private final String name;
Animals(double height) {
this.age = 10;
this.name = "Human";
System.out.println("human height: " + height);
}
Animals(int age, String name) {
this.age = age;
this.name = name;
System.out.println(this.name + " created with age: " + this.age);
}
void greeting() {
System.out.println("Hello, my name is " + this.name + " and I'm " + this.age + " years old!");
}
abstract void move();
}
- enum은 열거 패턴을 지원하기 위한 특수한 유형의 클래스이다.
- enum은 클래스이므로 필드와 메소드, 생성자를 가질 수 있다.
- enum의 각 값은 대응되는 하나의 인스턴스로 생성되어 public static final 필드로 공개된다.
- 이 때, enum에서 생성되는 각 인스턴스는 대응되는 형식의 생성자를 통해 생성된다.
- 상술한 예시에서, HUMAN과 다른 값들은 괄호 안의 매개변수를 대응되는 형식의 생성자에 전달한다.
- 생성된 인스턴스들은 enum의 형태를 따르므로, 상술한 예시에서는 값 별 인스턴스마다 age, name, greeting 멤버를 갖는다.
- enum의 각 값에 대응되는 인스턴스는 enum이 최초로 사용되는 시점에 모두 생성된다.
- 이는 enum의 인스턴스를 표현하는 필드가 static이기 때문으로, 최초 호출 시점에 메모리에 모든 static 필드가 로드된다.
- enum에 정의된 메소드가 각 값마다 다르게 동작하도록 하고 싶은 경우, enum에 추상 메소드를 정의하고 각 값에서 이를 재정의한다.