* 열거 타입
1.열거 타입(Enumeration Type)
- 한정된 값만을 갖는 데이터 타입
- 한정된 값은 열거 상수(Enumeration Constant)로 정의
2.열거 타입 선언
- 열거 타입 소스 파일 생성 : ~.java
- 열거 타입 이름의 첫문자 : 대문자로 작성 (관례)
- 소스 작성 방법
- 파일 이름과 동일한 이름으로 선언
- Ex)
public enum 열거타입이름 {...}
- 한정된 값인 열거 상수 정의
- 열거 상수 이름은 관례적으로 모두 대문자로 작성
- 다른 단어가 결합된 이름일 경우 관례적으로 밑줄(_)로 연결
- Ex)
public enum Week{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,...} public enum LoginResult {LOGIN_SUCCESS,LOGIN_FAILED}
3.열거 타입 변수
- 열거 타입 변수 선언
- EX)
// 열거타입 변수; Week today; Week reservationDay;
- EX)
- 열거 상수값 저장
- 열거 타입 변수 값은 열거 상수 중 하나이어야 한다
- EX)
// 열거타입 변수 = 열거타입.열거상수; Week today = Week.SUNDAY;
- 열거 타입 변수는 참조 타입
- 열거 타입 변수는 참조 타입이므로 null 값을 저장할 수 있다
- EX)
Week birthday = null;
- 열거 상수는 열거 객체를 참조한다
- 열거 객체는 힙에 생성된다
- 열거 상수는 메소드 영역에서 열거 객체를 참조한다
-
EX) 실습
package com.javateam.jse; import java.util.Calendar; public class EnumWeekExample { public static void main(String[] args) { Week_thisJava today = null; // 초기화 // 열거타입 변수 Week_thisJava 에 지정가능한 것은 열거 상수값만 지정가능하다 Calendar cal = Calendar.getInstance(); // getInstance : 내 컴퓨터에 현재 날짜를 Calendar객체로 만들어서 돌려준다 int week = cal.get(Calendar.DAY_OF_WEEK); // Calendar의 참조변수 cal을 통해서 get메소드를 사용해 Calendar.DAY_OF_WEEK 으로 지정해주면 get은 오늘의 요일을 돌려준다 System.out.println(week); // 2출력 => 일요일 :1, 월요일 : 2, 화요일 : 3 ... switch(week) { case 1: today = Week_thisJava.SUNDAY; break; case 2: today = Week_thisJava.MONDAY; break; case 3: today = Week_thisJava.TUESDAY; break; case 4: today = Week_thisJava.WEDNESDAY; break; case 5: today = Week_thisJava.THURSDAY; break; case 6: today = Week_thisJava.FRIDAY; break; case 7: today = Week_thisJava.SATURDAY; break; } System.out.println("오늘 요일 : " + today); // 오늘 요일 : MONDAY 출력 // 열거타입 변수 today를 출력 시키면 열거타입 변수가 참조하는 열거 객체의 문자열이 출력된다 // 열거 객체의 문자열은 열거상수의 이름과 같은 문자열을 가지고 있다 if(today == Week_thisJava.SUNDAY) { // 열거타입 변수가 참조하는 열거 객체와 열거상수가 참조하는 열거객체가 동일한지 비교 System.out.println("일요일에는 축구를 합니다"); }else { System.out.println("열심히 자바 공부합니다"); } } }
4.열거 객체의 메소드
- 열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있다
- 열거 타입은 컴파일시에 java.lang.Enum 클래스를 자동 상속한다
- 열거 객체는java.lang.Enum 클래스의 메소드를 사용할 수 있다
- name() 메소드 : 열거객체의 문자열을 리턴해주는 메소드
- EX)
Week today = Week.SUNDAY; // week라고 하는 열거 타입 변수에 SUNDAY라고 하는 상수를 대입 String name = today.name(); // today의 name이라는 메소드를 호출하면 name은 열거객체의 문자열 SUNDAY를 리턴해준다
- EX)
- ordinal()메소드 : 열거객체의 순번(0부터시작)을 리턴해주는 메소드
- EX)
Week today = Week.SUNDAY; // week라고 하는 열거 타입 변수에 SUNDAY라고 하는 상수를 대입 int ordinal = today.ordinal(); // SUNDAY가 선언된순서(1)을 리턴한다
- EX)
- compareTo() 메소드 : 열거객체를 비교해서 순번 차이를 리턴
- EX)
Week day1 = Week.MONDAY; // week라는 변수 day1에 열거상수 MONDAY가 대입 Week day1 = Week.WEDNESDAY; // week라는 변수 day2에 열거상수 WEDNESDAY가 대입 int result1 = day1.compareTo(day2); // MONDAY : 순번 0번 WEDNESDAY 순번 2번 으로 // 0 - 2 : -2 로 result1에는 -2가 저장된다 int result2 = day2.compareTo(day1); // MONDAY : 순번 0번 WEDNESDAY 순번 2번 으로 // 2 - 0 : 2 로 result2에는 2가 저장된다
- valueOF() 메소드 : 주어진 문자열의 열거객체를 리턴
- EX)
Week weekDay = Week.valueOF("SATURDAY"); // valueOF()에 문자열로 정보를 주면 동일한 문자를 가지고 있는 // 열거객체의 번지를 weekDay로 리턴시켜준다
- values() 메소드 : 모든 열거 객체들을 배열로 리턴
- EX)
Week[] days = Week.values(); // values()는 배열을 생성하고 생성된 배열의 번지를 리턴해 days에 대입 for(Week day : days){ System.out println(day); }