티스토리 뷰

주의 사항!

  • 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.

 


열거 타입 선언

C언어나 C++에서 열거형에 대해 배웠습니다. 자바에도 역시 이 열거형이 있습니다. 자바에서는 이를 열거 타입이라고 부르는 것 같습니다. 그런데 자바에서는 열거 타입을 사용하는 방법에 조금 특이한 부분이 있습니다. 자바에서 열거 타입을 선언하기 위해서는 우선 열거 타입의 이름으로 소스 파일(.java)을 생성해야 합니다.

 

이클립스에서 일주일에 해당하는 월, 화, 수, 목, 금, 토, 일을 열거 상수로 갖는 열거 타입을 선언해 보겠습니다. 이 열거 타입의 이름은 Week로 하겠습니다.

우선 위와 같이 패키지를 우클릭합니다. 그리고 'New - Enum'을 클릭합니다.

Name으로 'Week'를 입력하고 'Finish'를 클릭합니다.

그리고 위와 같이 열거 상수들을 기입해주면 열거형 Week의 선언이 끝났습니다.

 

열거 타입 변수

선언한 열거 타입을 사용하는 방법도 C언어와는 다릅니다. C언어에서는 열거형 선언만 하면 별도의 변수를 통하지 않아도 열거 상수들을 사용할 수 있었습니다. 그런데 자바에서는 열거 상수를 사용하기 위해 열거 타입 변수를 선언해야 합니다.

 

열거 타입 변수는 다음과 같이 선언하고 사용할 수 있습니다.

Week today = Week.SUNDAY;

위에서 확인할 수 있는 것처럼 열거 상수를 사용할 때에도 열거 상수만 덩그러니 사용할 수는 없습니다. 열거 타입을 통해 열거 상수에 접근해야 합니다. 그리고 열거 타입 변수에는 null을 저장하는 것도 가능합니다. 왜냐하면 열거 타입 변수는 객체를 참조하는 참조 변수이기 때문입니다.

 

int나 double과 같은 타입들을 기본 타입이라고 하고, 클래스, 배열, 열거 타입, 인터페이스 등을 참조하는 변수 타입을 참조 타입이라고 합니다. 이들은 무언가의 주소를 저장합니다. 위에서 선언한 열거 타입 변수 today도 참조 타입 변수이므로 무언가의 주소를 저장합니다. 그렇다는 것은 위의 예에서 열거 상수 SUNDAY가 객체라도 된다는 말인데, 맞습니다.

열거 상수들은 전부 객체로서 취급됩니다.

 

열거 타입을 선언하면 그 안의 열거 상수들은 모두 객체로서 힙 영역에 저장됩니다. 그리고 이들을 참조하는 변수들은 모두 열거 상수의 주소를 저장하게 되는 것입니다.

 

열거 객체의 메소드

열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있습니다. 열거 객체는 몇 가지의 메소드를 가지고 있습니다.

 

name() 메소드

 name() 메소드는 열거 객체가 가지고 있는 문자열을 반환합니다. 이때 반환되는 문자열은 열거 타입을 정의할 때 사용한 상수 이름과 동일합니다.

Week today = Week.SUNDAY;
String name = today.name();    //name == SUNDAY

 

ordinal() 메소드

ordinal() 메소드는 전체 열거 객제 중 몇 번째 열거 객체인지를 알려줍니다. 열거 객체의 순번은 0부터 시작합니다.

Week today = Week.SUNDAY;
int ordinal = today.ordinal();    //ordinal == 6

 

compareTo() 메소드

compareTo() 메소드는 매개값으로 주어진 열거 객체를 기준으로 전후로 몇 번째 위치하는지를 비교합니다. 만약 열거 객체가 매개값의 열거 객체보다 순번이 빠르면 음수, 순번이 늦다면 양수로 반환됩니다.

Week day1 = Week.MONDAY;
Week day2 = Week.WEDNESDAY;
int result1 = day1.compareTo(day2);    //-2
int result2 = day2.compareTo(day1);    //2

 

valueOf() 메소드

valueOf() 메소드는 매개값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 반환합니다. 이 메소드는 외부로부터 문자열을 입력받아 열거 객체로 변환할 때 유용하게 사용할 수 있습니다.

Week weekDay = Week.valueOf("SATURDAY");

 

values() 메소드

values() 메소드는 열거 타입의 모든 열거 객체들을 배열로 만들어 반환합니다. 

Week[] days = Week.values();

for(Week day : days)
{
	System.out.println(day);
}

/*
실행결과

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

*/

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함