✍ Today I Learned
05 참조타입
05-3 열거 타입
열거 타입이란?
- 한정된 값인 열거 상수(enumeration constant)중에서 하나의 상수를 저장하는 타입
- ex) 요일에 대한 데이터(월, 화, 수, 목, 금), 계절에 대한 데이터(봄, 여름, 가을, 겨울)
열거 타입 선언
- 먼저 열거 타입 이름을 정하고, 해당 이름으로 소스파일(.java)을 생성해야 한다.
- 이름은 관례적으로 첫 글자를 대문자로, 나머지는 소문자로 한다.
- ex) Week.java / MemberGrade.java / ProductKind.java
- public enum 키워드로 선언한다.
- 열거 타입의 값으로 사용 되는 열거 상수는 관례적으로 모두 대문자로 작성한다.
- 열거 상수가 여러 단어일 땐 밑줄(_)로 연결한다.
- ex) LOGIN_SUCCESS / LOGIN_FAILED
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
열거 타입 변수
- 열거 타입도 하나의 타입이므로 변수를 선언하고 사용해야 한다.
- 열거 상수는 단독으로 사용할 수 없고, ‘열거 타입.열거 상수’ 형태로 사용된다.
- 열거 타입도 참조 타입이기 때문에 null값을 저장할 수 있다.
// 다음과 같이 변수로 선언 가능
// today 변수에 저장할 수 있는 것은 Week에 선언된 7개 열거 상수 중 하나
Week today;
today = Week.SUNDAY;
열거 상수는 객체일까?
- 맞다. 열거 상수는 열거 객체로 생성된다.
- 열거 상수는 다음과 같이 7개의 Week 객체로 생성된다. 그리고 메소드 영역에 생성된 열거 상수가 해당 Week 객체를 각각 참조한다.
- 열거 타입 변수 today는 스택 영역에 생성된다.
- today에 저장되는 값은 Week.SUNDAY 열거 상수가 참조하는 객체의 번지이다.
Week week1 = Week.SATURDAY;
Week week2 = Week.SATURDAY;
System.out.println(week1 == week2); // true
열거 타입 오늘의 요일 예제
- Calendar 클래스를 이용하여 변수를 선언하고, Calendar.getInstance() 메소드로 Calendar 객체를 얻는다.
- get() 메소드를 이용하면 다음과 같이 얻을 수 있다.
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR); // 연
int month = now.get(Calendar.MONTH) + 1; // 월(1~12)
int day = now.get(Calendar.DAY_OF_MONTH); // 일
int week = now.get(Calendar.DAY_OF_WEEK); // 요일(1~7)
int hour = now.get(Calendar.HOUR); // 시간
int minute = now.get(Calendar.MINUTE); // 분
int second = now.get(Calendar.SECOND); // 초
- 예제 코드의 흐름
- Calendar로 오늘의 요일 얻기
- Week 열거 타입 변수 today에 해당 열거 상수 대입
- if문으로 일요일에 조건을 걸어 해당하는 내용 출력
package chap05.sec03.exam02;
import chap05.sec03.exam01.Week;
import java.util.Calendar;
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)까지의 숫자를 리턴
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("열심히 자바 공부합니다.");
}
}
}
열거 타입 활용에 관한 참고 자료
※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.
'📝 TIL' 카테고리의 다른 글
[TIL] Flask 로그인/회원가입 구현하기(JWT, 유효성 검사) (0) | 2022.11.15 |
---|---|
[TIL] 1주차 미니 프로젝트ㅣ시작 (2) | 2022.11.15 |
[TIL] Java 참조 타입, 메모리 사용 영역, String, 배열 (4) | 2022.11.11 |
[TIL] Java 조건문, 반복문, break, continue (0) | 2022.11.10 |
[TIL] 항해99 입학시험 (0) | 2022.11.09 |