profile image

L o a d i n g . . .

article thumbnail image
Published 2022. 6. 29. 07:08

열거 타입?

- 한정된 값인 열거상수(enumeration constant)중 하나의 상수를 저장하는 타입.

ex) 월,화,수,목,금,토,일 ;요일타입  또는 봄,여름,가을,겨울 계절타입

 

public enum Week {
	MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

 

 

여기서 Week가 열거타입, 요일들이 열거 상수 라고 불린다.

 

 

Week today; // 열거타입 Week로 인스턴스 변수선언

today = Week.FRIDAY; // 열거상수 FRIDAY를 today 변수에 저장

 

 

 

 

 


열거 타입 선언

열거 타입을 선언하기 위해선 먼저 열거 타입의 이름을 정하고 해당 이름으로 소스파일(.java)을 생성해야한다.

 

 

 

접근제어자 enum 열거형이름 {상수명1, 상수명2, ...}

소스파일의 내용으론 위와같은 열거 타입 선언이 온다. 

 

 

 

 

패키지에 enum 을 생성해준다.

 

 

 

 

package a220629;

public enum Week {
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
}

열거 타입을 선언하면 이제 열거 타입을 사용할 수 있다.

열거 타입도 하나의 타입이므로 변수를 선언하고 사용해야한다.

 

 

 

 

Week today = Week.SUNDAY;
Week birthday = null;

1. today 열거타입 변수에 열거상수 SUNDAY를 저장

2. 열거타입 변수는 null값 저장이 가능 (열거 타입도 참조타입이기 때문)

=> 참조타입변수는 객체를 참조하는 변수이므로 열거 상수는 메서드영역에 객체로 생성되어 각각 참조

 


열거타입 변수 today는 스택영역에 생성

today에 저장되는 값은 week.SUNDAY 열거상수가 참조하는 객체의 번지

따라서

열거상수 Week.SUNDAY와 today변수는 서로 같은 Week 객체를  참조

today == Week.SUNDAY; //true

그렇기때문에 equals()가 아닌 '=='로 비교가 가능하다.

그러나 > < 같은 비교연산자는 사용할 수 없고 compareTo()는 사용이 가능하다.

 

compareTo()?

두 비교대상이 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수를 반환

 

 

 

 

 


java.lang.Enum

Enum클래스에 정의된 메서드는 다양하나 그 중 몇가지를 소개한다.

public class EnumWeekEx {
	public static void main(String[] args) {
		Week today = null;
		
		Week[] wArr = Week.values(); //열거형의 모든 상수를 배열에 담아 반환
		for(Week w : wArr) {			//이름을 문자열로 반환
			System.out.printf("%s = %d %n", w.name(), w.ordinal());
            							//열거상수가 정의된 순서를 정수로 반환
		}
						// name과 일치하는 열거형 상수반환
		Week wArr2 = Week.valueOf("SUNDAY");
		System.out.println(wArr2);
		System.out.println(Week.SUNDAY == wArr2);
	}
}

 

 

 

 

 

 


예제

Calendar클래스를 이용해 요일을 얻고, 해당 열거상수 대입

 

package a220629;

import java.util.Calendar;

public class EnumWeekEx1 {
	public static void main(String[] args) {
		Week today = null;
		
			//getInstance()메소드로 Calendar객체 생성후 caldendar 변수에 대입
		Calendar calendar = Calendar.getInstance();
									//일(1)~토(7)까지의 숫자 리턴
		int week = calendar.get(Calendar.DAY_OF_WEEK);
		
		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("열심히 자바 공부를 합니다");
		}
	}
}

 

네 열심히 자바 공부를 합니다..

 

 

 

 

 

 

 

 

 

참고:

- 혼자 공부하는 자바(신용권), 한빛미디어

- 자바의정석(남궁성), 도우출판

- https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html

 

반응형
복사했습니다!