본문 바로가기

아는 만큼 보인다/Tip

enum 자료형 흉내내기


 


 

  • 아래와 같은 enum 자료형이  있다
    두 개의 enum 상수가 있다.
    멤버 변수 symbol 을 하나 갖고, 추상 메소드도 하나 선언되어있다

    enum MyEnum {

    PLUS("+") {double apply(double x, double y){return x+y;}},

    MINUS("-") {double apply(double x, double y){return x-y;}};

    private final String symbol; // 불변

    MyEnum(String symbol){

    this.symbol = symbol;

    }

    // 추상 메소드

    abstract double apply(double x, double y);

    }


  • 위 enum 자료형을 일반 클래스로 흉내내 보자
    열거형의 각 상수는 
    public static final 로 선언된 열거형 클래스의 하위 클래스(익명클래스) 객체로 이해된다

    abstract class MySimilarEnum implements Comparable<MySimilarEnum>, Serializable {

    public static final MySimilarEnum PLUS   = new MySimilarEnum("+") { 
                @Override
                double apply(double x, double y){return x+y;}

                
                @Override
                public String toString() {

    return "PLUS";

        }

            }; // (MySimilarEnum의 하위) 익명 클래스 객체


            public static final MySimilarEnum MINUS   = new MySimilarEnum("-") {
                @Override
                double apply(double x, double y){return x-y;}

                
                @Override
                public String toString() {

    return "MINUS";

        }

            }; // (MySimilarEnum의 하위) 익명 클래스 객체

    private final String symbol; // 불변

    MySimilarEnum(String symbol){

    this.symbol = symbol;

    }

    @Override

    public int compareTo(MySimilarEnum o) {

    return 0;

    }

    @Override

    public String toString() {

    return symbol;

    }

    // 추상 메소드

    abstract double apply(double x, double y);

    }


  • 참고 Effective Java 2판, 규칙 30. enum을 사용하라