[Java] 열거 타입(Enum) 사용법 & 예제

프로그래밍을 하다보면 몇가지의 한정된 데이터들을 가지는 경우가 있습니다. 대표적으로는 "요일"이나 "계절" 같은것이지요 요일은 월,화,수,목,금,토,일 이렇게 7가지밖고 계절도 봄,여름,가을,겨울 4가지 계절로 한정되어 있습니다. 이렇게 이와 같이 한정된 데이터들을 갖는 데이터들은 열거형으로 묶어주면 편합니다.

    열거형(Enum) 선언 방법

    enum Season { //class 외부에서 선언
        봄, 여름, 가을, 겨울
    }
    
    public class enum_ex {
    	public enum Season { //class 내부에서 선언
            봄, 여름, 가을, 겨울
        }
    }

    enum 키워드는 열거 타입을 선언하기 위한 키워드입니다. 열거 타입(Season)이름을 지정하고 열거 상수(봄,여름,가을,겨울)를 나열하면 됩니다. 열거 타입 이름으로 소스파일(.java)를 생성하여도 됩니다.

     

     열거형(Enum) 사용법 

    public class enum_ex {
        public enum Season {
    	    봄, 여름, 가을, 겨울
        }
    	
        public static void main(String[] args) {
            Season season = Season.봄;
            System.out.println(season);
            System.out.print(Season.여름);
        }
    }

    예제1

    열거형 변수 enum을 사용할때에는 위와 같이 마치 class에서 특정값을 땡겨갈때와 똑같이 사용하시면 됩니다.

     

    실사용 예시

    enum Season {
        봄, 여름, 가을, 겨울
    }
    
    public class People {
        public String name; //이름
        public Season favorite_session; //좋아하는계절
    
        public static void main(String[] args) {
        	People people = new People();
            
        	people.name = "홍길동";
        	people.favorite_session = Season.봄;
             
            System.out.println("이름 : " + people.name);
            System.out.println("좋아하는 계절 : " + people.favorite_session);
        }
    }
    

    예제2

    enum이 사용되어질때는 위와 같이 사람별로 좋아하는 계절을 구해야하는 일이 생길경우 이름은 계속해서 변하지만 좋아하는계절의 계절의 경우에는 봄, 여름, 가을, 겨울 이렇게 4가지 계절로 고정입니다. 이럴때 계절에다가 enum을 활용하시면 좋습니다.

     

     열거객체 메소드 

    values()

    enum Season {
        봄, 여름, 가을, 겨울
    }
    
    public class enum_ex {
        public static void main(String[] args) {
        	for(Season sea : Season.values()){
        	    System.out.println(sea);
            }
        }
    }

    예제3

    values()메소드는 열거 타입의 모든 열거객체들을 배열로 만들어 리턴합니다.

     

    ordinal()

    enum Season {
        봄, 여름, 가을, 겨울
    }
    
    public class enum_ex {
        public static void main(String[] args) {
        	Season seson = Season.여름;
        	System.out.println(seson.ordinal());
        }
    }

    예제4

    Ordinal() 메소드는 전체 열거 객체 중 몇번째 열거 객체인지 알려줍니다. 열거 객체의 순번은 배열과 마찬가지로 인덱스가 0부터 시작합니다.

     

    valueOf()

    enum Season { //class 외부에서 선언
        봄, 여름, 가을, 겨울
    }
    
    public class enum_ex {
    
        public static void main(String[] args) {
        	Season seson = Season.valueOf("가을");
        	System.out.println(seson);
        }
    }
    

    예제5

    values()메소드는 매개 값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 리턴합니다.

     

    name()

    enum Season { //class 외부에서 선언
        봄, 여름, 가을, 겨울
    }
    
    public class enum_ex {
    
        public static void main(String[] args) {
        	Season seson = Season.가을;
        	String name = seson.name();
        	System.out.println(name);
        }
    }
    

    예제6

    name() 메소드는 열거 객체가 가지고 있는 문자열을 리턴합니다. 이때 리턴되는 문자열은 열거 타입을 정의할때 사용한 상수 이름과 동일합니다.

     

    compareTo()

    enum Season { //class 외부에서 선언
        봄, 여름, 가을, 겨울
    }
    
    public class enum_ex {
    
        public static void main(String[] args) {
        	Season seson1 = Season.가을;
        	Season seson2 = Season.겨울;
        	
        	int result1 = seson1.compareTo(seson2);
        	int result2 = seson2.compareTo(seson1);
        	
        	System.out.println("result1 = " +result1);
        	System.out.println("result2 = " +result2);
        }
    }
    

    예제7

    compareTo()메소드는 매개값으로 주어진 열거 객체를 기준으로 전후로 몇번째 위치하는지 비교합니다. 만약 열거 객체가 매개값의 열거 객체보다 순번이 빠르다면 음수가, 순번이 늦다면 양수가 리턴됩니다.

     

    댓글

    Designed by JB FACTORY