열거 타입 : 데이터 중 몇가지로 제한된 값(열거상수)을 갖는 타입. ex) 열거타입 Week : 월, 화, 수, 목, 금, 토, 일이라는 열거상수 7개의 값을 가짐 Week today; today = Week.FRIDAY -> today 변수에 Week에 선언된 7개의 열거상수 중 하나를 저장할 수 있다.
열거 타입 선언 1. 열거 타입의 이름을 정하고 소스파일(.java) 생성 ->열거타입의 이름은 관례적으로 첫글자와 각단어의 첫글자 대문자, 나머지는 소문자로 구성 ex)Week.java, MemberGrade.java 2. enum(반드시 소문자)타입을 사용하여 열거타입 선언 ex)public enum 열거타입이름 {...} 3. 열거 상수를 선언. 열거상수는 열거타입때 주어진 상수를 말한다. 열거상수는 대문자로 작성하고 만약 열거 상수가 여러 단어로 구성되어있을 경우 단어 사이를 밑줄(_)로 연결하는 것이 관례이다. 열거 상수의 경우 힙영역에 객체가 생성되고 열거 객체값으로 열거 상수가 저장된다. 또한 메소드 영역의 열거상수는 힙 영역의 열거 객체를 참조한다. 따라서 열거 타입도 참조 타입니다.
이클립스에서 열거타입 선언 File -> New -> Enum메뉴를 선택한다. Package가 열거 타입이 속하게 될 패키지가 맞는지 확인한 후 Name에는 열거타입 이름을 기재한다. Finish를 누른 뒤 열거상수를 작성한다.
열거 타입 변수 : 열거 타입으로 선언된 변수이다. 열거 타입도 하나의 타입이므로 변수를 선언하고 사용해야한다. 열거타입변수를 선언한 뒤에는 열거상수를 저장할 수 없다. 열거상수는 반드시 열거타입.열거상수 형태로 사용해야한다. ex) Week today; //열거타입변수 today선언 today = Week.MONDAY; //열거상수 저장 ex) Week today = Week.MONDAY; //열거상수 저장 ex) Week birthday = null; //열거상수 저장 -> 참조타입이므로 null값 저장 가능
참조타입변수는 객체를 참조하는 변수이다. 따라서 열거 상수는 열거 객체로 생성이된다. 위 예시에서 열거 타입 Week의 경우 MONDAY 부터 SUNDAY까지 총 7개의 Week객체가 힙영역에 생성되며 메소드 영역의 열거 상수가 각각 해당 Week 객체를 참조한다. 또한 열거타입변수 today는 스택영역에 생성되어 각각의 열거 상수가 참조하는 객체의 번지를 저장한다. 따라서 열거 상수 Week.MONDAY와 today변수는 서로 같은 Week객체를 참조하게 되므로 ==연산결과가 true가 된다.
-열거타입 Week를 사용하려면 날짜 정보가 필요. 자바는 Calendar클래스를 제공하여 날짜, 요일,시간을 얻을 수 있다. 1. Calendarcal = Calender.getInstance() ->Calendar변수를 선언한 뒤 Calendar.getInstance()메소드로 Calendar객체를 얻는다. 2. int year = now get(Calendar.YEAR); int month = now get(Calendar.MONTH)+1; int day =now get(Calendar.DAY_OF_MONTH); int week =now get(Calendar.DAY_OF_WEEK); int hour =now get(Calendar.HOUR); int minute =now get(Calendar.MINUTE); int second =now get(Calendar.SECOND); ->get메소드를 이용해서 연, 월, 일, 요일, 시간, 분, 초를 얻는다. 3. import java.util.Calender ->Calendar클래스는 java.util패키지에 있으므로 import가 필요하다. 따라서 package아래줄에 임포트를 해주어야한다.
package ch05.sec03; import java.util.Calendar; //Calendar를 사용하기 위해 import문 작성 publicclass Ex01_EnumWeek { publicstaticvoid main(String[] args) { Week today = null; //열거 타입 변수 선언 Calendar cal = Calendar.getInstance(); //Calendar변수를 선언하고 객체를 얻음 intweek = cal.get(Calendar.DAY_OF_WEEK); //오늘의 요일(일:1~토:7)에 해당하는 숫자 리턴 switch(week) { case 1: today = Week.SUNDAY; break; //열거상수 저장 case 2: today = Week.MONDAY; break; case 3: today = Week.TUESDAY; break; case 4: today = Week.WEDNESDAY; break; case 5: today = Week.THURSDAY; break; case 6: today = Week.FRIDAY; break; case 7: today = Week.SATHURDAY; break; } System.out.println("오늘 요일 : " + today); if(today==Week.SATHURDAY) { System.out.println("토요일에는 독서를 합니다."); }else { System.out.println("코딩 공부를 합니다."); } } } 실행결과 :