06
17
728x90

열거 타입(Enumeration Type)

한정된 값(ex. 요일, 계절 등)만을 갖는 데이터 타입

한정된 값은 열거 상수(Enumeration Constant)로 정의

 

열거 타입 선언

열거 타입 소스 파일 생성 : ~.java

열거 타입의 이름은 첫 문자는 대문자로 작성(관례)

Week.java
MemberGrade.java
Productkind.java

 

소스 작성 방법

파일 이름과 동일한 이름으로 다음과 같이 선언

public enum 열거타입이름 {...}

한정된 값인 열거 상수 정의

- 열거 상수 이름은 관례적으로 모두 대문자로 작성

- 다른 단어가 결합된 이름일 경우 관례적으로 밑줄(_)로 연결

public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, ... }
public enum LoginResult { LOGIN_SUCCESS, LOGIN_FAILED }

 

열거 타입 변수

열거 타입 변수 선언

Week today;
Week reservationDay;

열거 상수값 저장

열가 타입 변수 값은 열거 상수 중 하나이어야 한다.

열거타입 변수 = 열거타입.열거상수;
Week today = Week.SUNDAY;

열거 타입 변수는 참조 타입

열가 타입 변수는 참조 타입이므로 null 값을 저장할 수 있다.

Week birthday = null;

열거 상수는 열거 객체를 참조한다.

열거 객체는 힙에 생성된다.

열거 상수는 메소드 영역에서 열거 객체를 참조한다.

 

예제)

package sec07.exam01_enum;

import java.util.Calendar;

public class EnumWeekExample 
{

	public static void main(String[] args) 
	{
		Week today = null;
		Calendar cal = Calendar.getInstance(); // Calendar.getInstance() 컴퓨터의 현재 날짜를 리턴해줌.
		int week = cal.get(Calendar.DAY_OF_WEEK); //오늘의 요일을 리턴해서 week에 저장
		System.out.println(week); // 일요일(1), 월요일(2), 화요일(3), 수요일(4), 목요일(5), 금요일(6), 토요일(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.SATURDAY;
				break;
		}
		System.out.println("오늘 요일 :" + today); // 출력결과가 문자열이 나오는 이유 : 자신이 참조하는 열거 객체의 문자열이 출력된 것
		
		if(today == Week.SUNDAY)
		{
			System.out.println("일요일에는 축구를 합니다.");
		}
		else
		{
			System.out.println("열심히 자바 공부를 합니다.");
		}
	}
}

출력 결과

 

열거 객체의 메소드

열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있다.

열거 타입은 컴파일시에 java.lang.Enum 클래스를 자동 상속한다.

열거 객체는 java.lang.Enum 클래스의 메소드를 사용할 수 있다.

name() 메소드

Week today = Week.SUNDAY;
String name = today.name();

ordinal() 메소드

 

Week today = Week.SUNDAY;
int ordinal = today.ordinal();

compareTo() 메소드

Week day1 = Week.MONDAY;    //0
Week day2 = Week.WEDNESDAY:   //2
int result1 = day1.compareTo(day2);  //-2
int result2 = day2.compareTo(day1);  //2

valueOf() 메소드

Week weekDay = Week.valueOf("SATURDAY");

values() 메소드

Week[] days = Week.values();
for(Week day : days)
{
      System.out.println(day);
}

 

예제)

package sec07.exam01_enum;

public class EnumMethodExample 
{

	public static void main(String[] args) 
	{
		Week today = Week.SUNDAY;
		String name = today.name();
		System.out.println(name);
		
		int ordinal = today.ordinal();
		System.out.println(ordinal);
		
		Week day1 = Week.MONDAY;
		Week day2 = Week.WEDNESDAY;
		
		int result1 = day1.compareTo(day2);
		int result2 = day2.compareTo(day1);
		System.out.println(result1);
		System.out.println(result2);
		
		Week weekday = Week.valueOf("SUNDAY");
		if(weekday == Week.SATURDAY || weekday == Week.SUNDAY)
		{
			System.out.println("주말");
		}
		else
		{
			System.out.println("평일");
		}
		
		Week[] days = Week.values();
		for(Week day : days)
		{
			System.out.println(day);
		}
	}
}

출력 결과

 

728x90

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

[JAVA] 객체와 클래스  (0) 2021.06.18
[JAVA] 객체 지향 프로그래밍  (0) 2021.06.18
[JAVA] 배열 타입(2)  (0) 2021.06.16
[JAVA] 배열 타입(1)  (0) 2021.06.15
[JAVA] String 타입  (0) 2021.06.11
COMMENT