📝 TIL
[TIL] Java 열거 타입(Enum)
오늘 ONEUL
2022. 11. 12. 15:33
✍ 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("열심히 자바 공부합니다.");
}
}
}
열거 타입 활용에 관한 참고 자료
Java: enum의 뿌리를 찾아서...
이번 글에서는 자바 1.5버전부터 새롭게 추가된 열거형 상수인 enum(enumeration)에 대해 알아보겠습니다. 열거형은 서로 연관된 상수들의 집합입니다. 이번 글은 enum 정의와 enum 사용방법, 그리고 enum
www.nextree.co.kr
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com
※ 이 내용은 책 [혼자 공부하는 자바]를 보고 정리한 내용입니다.