본문 바로가기
Homo Faber/Idioms

enum 의 내용을 공통으로 사용하는 방법

by javauser 2008. 11. 25.
enum 객체는 상속이 되지 않기 때문에 공통된 부분을 상속을 사용해서 사용하지 못한다. 대신에 인터페이스와 static 오퍼레이션을 사용한다면 이와 유사하게 재사용할 수 있다.

예를 들어, 특정 코드값을 갖는 enum을 선언시 다음과 같이 사용할 수 있다.

public class CodeTest {

    private interface Codable {
        String getCode();
    }
   
    private static <E extends Enum<E> & Codable> E from(
            E[] values, String code) {
        for (E e : values)
            if (e.getCode().equals(code))
                return e;

        throw new IllegalArgumentException("Boring: " + code);
    }
   
    enum Gender implements Codable {
        MALE("1"), FEMALE("2");
       
        private final String code;
        Gender(String code) { this.code = code; }
        public String getCode() { return this.code; }
       
        static Gender makeCode(String genderCode) {
            return from(values(), genderCode);
        }
    }
   
    enum FixedCode implements Codable {
        THIS("001"), THAT("002");
       
        private final String code;
        FixedCode(String code) { this.code = code; }
       
        public String getCode() { return this.code; }
        static FixedCode makeCode(String fixedCode) {
            return from(values(), fixedCode);
        }
    }
}



반응형