Java Category/Java

[JAVA] 열거 타입(enum)

ReBugs 2022. 12. 28.

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다.


데이터 중에는 몇 가지로 한정된 값만을 갖는 경우가 있다.

예를 들어 요일에 대한 데이터는 월, 화, 수, 목, 금, 토, 일이라는 7개의 값만을 갖고, 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 4개의 값만을 가진다. 이와 같이 한정된 값만을 갖는 타입을 열거 타입(enumeration type)이라 한다.

 

열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입이다.

 

다음은 요일이라는 7개의 값을 갖는 데이터의 열거 타입 week를 선언한 것이다.

 

열거 타입 선언

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

열거 타입 이름은 관례적으로 첫 글자를 대문자로 하고 나머지는 소문자로 구성한다.

만약 여러 단어로 구성된 이름이라면 각 단어의 첫 글자는 대문자로 하는 것이 관례이다.

 

public enum 키워드는 열거 타입을 선언하기 위한 키워드이고, 열거 타입 이름은 소스 파일 이름과 대소문자가 모두 일치해야 한다.

public enum 열거타입이름 { ... }

열거 타입을 선언했다면 이제 열거 상수를 선언한다.

열거 상수는 열거 타입의 값으로 사용되는데, 관례적으로 열거 상수는 모두 대문자로 작성한다.

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

만약 열거 상수가 여러 단어로 구성될 경우에는 단어 사이를 밑줄(_)로 연결하는 것이 관례이다.

 

열거 타입 변수

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

열거타입 변수이름;
Week today;

열거 상수는 단독으로 사용할 수 없고 반드시 '열거 타입.열거 상수' 형태로 사용된다.

Week today = Week.FRIDAY;

 

메모리와 열거 타입

참조 타입과 메모리의 관계를 잘 모른다면 아래의 글을 읽는 것을 추천

2022.12.26 - [Language/JAVA] - [JAVA] 참조 타입과 참조 변수

 

[JAVA] 참조 타입과 참조 변수

데이터 타입은 기본 타입과 참조 타입으로 나눠지며, 기본 타입은 이전에 정리한 바가 있다. 2022.12.22 - [Language/JAVA] - [JAVA] 기본 타입 [JAVA] 기본 타입 변수를 선언할 때 주어지는 타입에 따라 변수

rebugs.tistory.com


열거 타입은 참조 타입이기 때문에 열거 상수는 객체이다.

열거 타입 변수 Week의 경우 MONSDAY~SUNDAY까지의 열거 상수는 열거 객체로 생성된다.

메소드 영역에 생성된 열거 상수가 해당 Week 객체를 각각 차조하게 된다.

 

열거 타입 변수에 열거 상수를 대입하면 아래와 같다.

Week today = Week.FRIDAY;

열거 타입 변수 today는 스택 영역에 생성되고, today에 저장되는 값은 Week.FRIDAY 열거 상수가 참조하는 객체의 주소이다. 그래서 열거 상수 Week.FRIDAY와 today 변수는 서로 같은 Week 객체를 참조하게 된다.

 

실습

File - New - Enum 클릭

 

열거 타입을 사용할 패키지 이름을 확인하고 열거 타입 이름을 설정한다.

 

소스파일 이름과 열거 타입 이름이 일치하는지 확인 후 열거 상수 작성

 

package TestPakage;
import java.util.Calendar;
public class Test {
	public static void main(String[] args) {
		Week today = null;
		
		Calendar cal = Calendar.getInstance();
		int week = cal.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.FRIDAY) {
			System.out.println("금요일엔 열심히 술을 마신다");
		} else {
			System.out.println("열심히 일을 한다");
		}
	}
}
/*
오늘 요일: MONDAY
열심히 일을 한다
*/

'Java Category > Java' 카테고리의 다른 글

[JAVA] 클래스(Class)  (0) 2022.12.30
[JAVA] 객체 지향 프로그래밍(OOP)  (0) 2022.12.29
[JAVA] 배열(Array)  (0) 2022.12.27
[JAVA] 참조 타입과 참조 변수  (0) 2022.12.26
[JAVA] 연산자  (2) 2022.12.25

댓글