@떤떤/#JAVA

[JAVA] 열거 타입

떤떤 2020. 4. 11. 20:46

 

열거 타입(enumeration type)이란 ?

  • 한정된 값만을 갖는 데이터 타입이다. 
  • 예를 들면 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 네 개의 값만을 가진다. 이와 같은 한정된 값을 말한다
  • 열거 타입은 몇 개의 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는 데이터 타입이다.

 

<열거 타입 선언>

  • 먼저 열거 타입의 이름을 정하고 열거 타입 이름으로 소스 파일(.java)을 생성해야 한다.
  • 열거 타입 이름은 첫 문자는 대문자로, 나머지는 소문자로 구성한다.
  • ex)Week.java , MemberGrade.java
package solution;

public enum Week {
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
}
  • public enum Week는 열거 타입을 선언하기 위한 코드이고 열거 타입 이름은 소스 파일명과 대소문자가 일치해야된다.
  • 열거 타입을 선언하고 열거 상수를 선언하는데 열거 상수는 모두 대문자로 작성해야된다.

 

<열거 타입 변수 선언>

  • 열거 타입도 하나의 데이터 타입이기때문에 변수를 선언하고 사용해야 한다.
  • 열거 타입 변수는 null값을 저장할 수 있는데 열거 타입도 참조 타입이기 때문이다. (Week birthday = null;)
  • 열거 상수는 열거 객체로 생성된다. 열거 타입 Week의 경우 MONDAY부터 SUNDAY까지의 열거 상수는 총 7개의 Week 객체로 생성된다. 그리고 메소드 영역에 생성된 열거 상수가 해당 Week객체를 각각 참조하게 된다.

열거타입 변수;

Week today;

열거타입 변수 = 열거타입.열거상수;

Week today = Week.SUNDAY;

 

<Week today = Week.SUNDAY 코드를 보자>

  • 열거 타입 변수 today는 스택 영역에 생성된다.
  • today에 저장되는 값은 Week.SUNDAY 열거 상수가 참조하는 객체의 번지이다. 
  • 따라서 열거 상수 Week.SUNDAY와 today 변수는 서로 같은 Week 객체를 참조하게 된다.
  • 그렇기 때문에 today == Week.SUNDAY 의 결과가 true이다.

 

example) Calendar를 이용한 오늘의 요일 얻고 열거 타입 변수 today에 해당 열거 상수 대입하기

package solution;

import java.util.Calender;

public class Solution {

	public void enumWeekExam(){
    
		Week today=null;
		Calendar cal=Calendar.getInstance();
		int week=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.SATURDAY;
			break;
		}
		
		System.out.println("Today : "+today);
        
		if(today==Week.SATURDAY||today==Week.SUNDAY){
			System.out.println("행복한 주말입니다.");
		}else{
			System.out.println("오늘도 열심히 공부합시다.");
		}
	}
	
	public static void main(String[] args) {
    
		Solution sl = new Solution();
		sl.enumWeekExam();
        
	}

}