열거타입을 선언했다면 이제 열거 타입을 사용 할 수 있다.
열거 타입도 하나의 데이터 타입이므로 변수를 선언하고 사용해야 한다.
열거 타입 변수 선언
열거타입 변수;
예시)
앞의 열거타입 Week로 변수를 선언하면 다음과 같다.
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
가 이미 선언되었다고 가정하자.
Week today;
Week reservationDay;
열거타입 상수 저장
열거타입 변수 = 열거타입.열거상수;
-열거 상수는 단독으로 사용 할 수는 없고 반드시 열거타입.열거상수로 사용된다.
-열거타입 변수값은 열거 상수 중 하나여야 한다.
(위의 Week 열거타입을 예로 들자면 월화수목금토일 중 하나여야 한다. )
-열거타입은 참조타입이기 때문에 null값을 쓸 수 있다.
예시)
Week today = Week.SUNDAY;
Week birthday = null;
열거타입과 객체
참조 타입 변수는 객체를 참조하는 변수.
열거 상수는 객체일까? => yes
따라서 열거 상수는 열거 객체로 생성된다.
*Week 열거를 생성하면 메모리에서는 어떤 일이 벌어질까?
(편의상 영어로된 요일을 한글로 침.)
- <heap 영역>: 열거 객체가 생성된다.
(월,화,수,목,금,토,일 총 7개의 객체가 만들어진다. ) - <method 영역>: 열거 상수와 heap영역의 객체를 참조하는 번지들이 저장된다.
(월,화,수,목,금,토,일 총 7개의 열거 상수와 힙 영역에 있는 7개의 객체를 각각 참조하는 주소가 저장된다.) - <stack 영역>: 변수 today가 생성되고 만약 위의 예시처럼 today에 일요일이 저장되었으면 today에는 heap 영역의 일요일 객체의 주소가 나온다. (method의 일요일이 참조하는 객체와 같은 객체를 참조한다.)
-그림과 같이 today 변수에 MONDAY를 저장했다면 method 영역의 MONDAY가 가리키는 heap 영역의 MONDAY 객체와 같은 객체를 참조한다.
=>그렇기때문에 ==의 연산결과는 true가 된다.
today == week.MONDAY //true
-또한 다른 열거타입 변수 두 개 둘 다 SATURDAY를 저장했다면 둘 다 heap 영역의 SATURDAY 객체를 가리킨다.
Week week1 = Week.SATURDAY;
Week week2 = Week.SATURDAY;
System.out.println (week1 == week2); //true
자바 API에 저장된 Calendar 클래스를 이용해서
오늘의 요일을 얻고, 열거 타입 변수 today에 해당 열거 상수를 대입하는 예제를 만들어보자.
-Calendar는 API에 저장된 클래스임.
컴퓨터의 날짜, 요일, 시간을 프로그램에서 사용 할수 있게 한다.
Week 열거타입을 먼저 생성
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
package sec07.exam01_enum;
import java.util.Calendar; //Calendar 클래스를 사용하기 위해 import문 사용
public class EnumWeekExample {
public static void main(String[] args) {
Week today = null; //열거타입 변수 선언
Calendar cal = Calendar.getInstance();
int week = cal.get(Calendar.DAY_OF_WEEK); //일(1)~토(7)까지의 숫자를 리턴해 변수 week에 대입
//만약 오늘이 일요일이면 week에는 1이 저장 될 것이다.
switch(week){
case 1: //캘린더 클래스에서 1은 일요일
today = Week.SUNDAY; //만약 오늘이 일요일-> 열거 타입 Week에 있는 열거상수 SUNDAY를 열거타입 변수 today에 대입
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;
}
//today 출력
System.out.println("오늘 요일: " + today);
//일요일이면 쉬고 아니면 공부한다고 출력하는 if문
if(today == Week.SUNDAY) {
System.out.println("일요일에는 쉽니다.");
}else {
System.out.println("열심히 공부합니다. ");
}
}
}
실행결과(작성요일:토요일):
오늘 요일: SATURDAY
열심히 공부합니다.
'5. 참조타입' 카테고리의 다른 글
5.7.3_열거 객체의 메소드 (0) | 2020.05.02 |
---|---|
5.7.1 열거타입 (enumeration type) (0) | 2020.05.01 |
5.6.10_ 향상된 for문 (0) | 2020.05.01 |
5.6.8_객체를 참조하는 배열 (1) | 2020.04.30 |
5.6.7_다차원 배열 (0) | 2020.04.30 |