SSISO Community

시소당

자바2 1.5의 새로운 특징들 - Typesafe Enums

Typesafe  Enums를  굳이  번역하자면  "타입  안전  열거형"  정도가  되겠다.  타입  안전  열거형은  말  그대로  열거형  타입을  제공하는  것이다.  이전까지  자바에서는  열거방식을  주로  상수를  정의해서  구현했었다.

        public  interface  Num  {
                public  static  final  int  ZERO  =  0;
                public  static  final  int  ONE  =  1;
                public  static  final  int  TWO  =  2;
                ....
        }
        //  Number  Interface  사용
        ......
        int  num;
        ...
        
        if(  num  ==  Num.ZERO  )  {
                ...
        }


하지만  위의  방식은  타입에  안전하지  않은데,  타입에  안전하지  않다는  것은  다음과  같음을  말한다.

        public  interface  Language  {
                public  static  final  int  JAVA  =  0;
                public  static  final  int  CPP  =  1;
                public  static  final  int  PERL  =  2;
                ....
        }
        
        //  Number  Interface  사용
        ......
        int  lan;
        ...
        if(  lan  ==  Num.ZERO  ){    //  equals  mean,  lan  ==  Language.JAVA
                ...
        }


위  코드의  비교문에는  Num.ZERO가  아닌  Language.JAVA가  와야  의미상  맞지만,  프로그램적으로는  문제가  없으며,  컴파일시에도  역시  에러가  발생하지  않는다.

즉,  타입에  안전하지  않다는  것은  위와  같이  상수를  이용한  열거형에서는  상수  값만  같으면  사실상  열거  타입의  구분이  의미가  없어짐을  의미한다.  그렇다고  타입에  안전한  레퍼런스  타입을  활용하게  되면,  switch  ~  case  문에서  사용할  수  없다는  단점이  있다.  이런  문제를  해결하기  위해서  자바  1.5에서는  enum  타입을  제공하기  시작했다.

        class  Test  
        {
                public  enum  Num  {  ZERO,  ONE,  TWO  };
                
                public  static  void  main(String[]  args)  
                {
                        Num  num  =  Num.ONE;
                        switch(  num  ){
                                case  ZERO:
                                        System.out.println("0");  break;
                                case  ONE:
                                        System.out.println("1");  break;
                                case  TWO:
                                        System.out.println("2");  break;
                                default:
                                        break;
                        }
                }
        }


열거  타입  그  자체가  타입이기  때문에,  열거  타입에  없는  값을  할당하게  되면  컴파일  에러가  발생하게  된다.

634 view

4.0 stars