목차
- Enum이란
- Enum 속 상수는 인스턴스이다.
핵심
- 책으로 이해가 안될 땐 영상으로, 영상이 이해가 안될 땐 책으로.. 다양하게 공부하자.
Enum이란
열거형이라고 한다. 어플리케이션 전체에서 사용하는 상수를 따로 포장해서 관리할 수 있다. 상수를 클래스 안에 길게 늘어뜨리지 않고 enum으로 변하게 사용 가능하다.
또한, 상수의 타입 확인을 확실하게 할 수 있다. enum은 클래스이다. 상수를 효과적으로 관리하는 클래스라고 생각하면 된다.
맨 처음 배울 땐 왜 쓰는지 몰랐지만, 책에선 열거형 상수를 사용하면, 기존 소스를 다시 컴파일 하지 않아도 된다고 한다.
Enum 속 상수는 인스턴스이다.
Enum 속 상수들은 단순히 상수가 아니라 하나의 인스턴스가 생겨난 것이다. 그렇기 때문에 생성자를 Enum 내부에 만들면 Enum 속 상수의 개수에 맞게 생성자가 호출된다. 아주 간편하게 인스턴스를 생성하는 방법인 것이다.
또한, enum 내부에 메서드와 속성을 부여할 수 있다.
enum Fruit {
APPLE("red"), PEACH("pink"), BANANA("yellow");
private final String color;
Fruit(String color) {
System.out.println("call constructor "+this);
this.color = color;
}
public String getColor() {
return color;
}
}
public class EnumMain {
public static void main(String[] args) {
Fruit type = Fruit.APPLE;
switch (type) {
case APPLE:
System.out.println(57+"kcal, color : "+Fruit.APPLE.getColor());
break;
case PEACH:
System.out.println(34+"kcal, color : "+Fruit.PEACH.getColor());
break;
case BANANA:
System.out.println(93+"kcal, color : "+Fruit.BANANA.getColor());
break;
}
}
}
Enum 속 다양한 메서드
- value()
public class EnumMain {
public static void main(String[] args) {
for (Fruit fruit : Fruit.values()) {
System.out.println("fruit : "+fruit+" color: "+fruit.getColor());
}
}
}
Enum에 추상 메서드 추가하기
Enum의 각 상수에 메서드를 구현하고 싶으면 추상메서드를 생성한 뒤 각 상수에서 구현하면 사용 가능하다.
enum Transportation {
BUS(100) { int calculateFare(int distance) {return distance * BASIC_FARE;}},
TRAIN(150) { int calculateFare(int distance) {return distance * BASIC_FARE;}},
SHIP(100) { int calculateFare(int distance) {return distance * BASIC_FARE;}},
AIRPLANE(300) { int calculateFare(int distance) {return distance * BASIC_FARE;}};
protected final int BASIC_FARE;
Transportation(int basicFare) {
this.BASIC_FARE = basicFare;
}
abstract int calculateFare(int distance);
public int getBASIC_FARE() {
return BASIC_FARE;
}
}
public class EnumMain {
public static void main(String[] args) {
for (Transportation transportation : Transportation.values()){
System.out.println(transportation.calculateFare(100)+"원");
}
}
}
'프로그래밍 > Java' 카테고리의 다른 글
20.02.02) Java - Stream (0) | 2020.02.02 |
---|---|
20.01.29) Java - Input&Output (0) | 2020.01.29 |
20.01.18) Java - 자주 하는 실수 (0) | 2020.01.18 |
20.01.09) Java - 유용한 메서드 (0) | 2020.01.09 |
19.12.30) Java - Static Map (0) | 2019.12.30 |