본문 바로가기

Programming/Java

enum type constant-specific method 구현

Java enum type 에는 constant-specific method 구현이라는 기법이 있다.


쉽게 말하자면 각각의 상수마다 다른 행동을 구현하는 것인데, enum type 을 통해서 간단하게 구현할 수 있다.


아래의 예제는 Effective Java 2nd edition 에서 발췌한 것이다.

public enum Operation {

    PLUS("+") {double apply(double x, double y){return x + y;}}, // "+" symbol 을 갖는 PLUS 상수의 행동을 정의

    MINUS("-") {double apply(double x, double y){return x - y;}}, // "-" symbol 을 갖는 MINUS 상수의 행동을 정의

    TIMES("*") {double apply(double x, double y){return x * y;}}, // "*" symbol 을 갖는 TIME 상수의 행동을 정의

    DIVIDE("/") {double apply(double x, double y){return x / y;}}; // "/" symbol 을 갖는 DIVIDE 상수의 행동을 정의


    private final String symbol; // enum type 에서 인스턴스 variable 은 반드시 final 로 선언이 되어야 하며,

    Operation(String symbol) { this.symbol = symbol;} // Constructor 에서 같이 초기화가 되어야 한다.

    @Override public String toString() {return symbol;} // 각각의 상수에 맞는 symbol 을 toString 메소드를 override 하여 출력

    abstract double apply(double x, double y); // 각각의 constant-specific method 를 위한 추상 메소드

    

    public static void main(String [] args) {

        double x = Double.parseDouble(args[0]); // 첫 번째 command line argument 를 x 로 설정

        double y = Double.parseDouble(args[1]); // 두 번째 command line argument 를 y 로 설정

        for (Operation op : Operation.values()) { // x 와 y 의 값을 이용하여 각각의 constant-specific method 의 작동을 시험

            System.out.printf("%f %s %f = %f%n", x, op, y, op.apply(x, y));

        }

    }

}


프로그램 실행시 command line 인자로 2 와 4 를 입력하였다.

출력 결과는 아래와 같다.

2.000000 + 4.000000 = 6.000000

2.000000 - 4.000000 = -2.000000

2.000000 * 4.000000 = 8.000000

2.000000 / 4.000000 = 0.500000