본문 바로가기

프로그래밍/Java

20.01.25) Enum

목차

  • 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