각종 언어 기본 문법/Java 주제별 정리

이것이 자바다 5장 복습 : 참조 타입 (3/) 열거 타입

혀니쌤1 2021. 8. 8. 21:18

 

◆  열거타입 선언하기

 

월화수목금토일 딱 7개의 데이터를 가지는 요일 처럼, 한정된 값만을 가지는 데이터 타입을 열거 타입 (enumeration type)이라고 부른다. 열거 상수 (enumeration constant) 중에서 하나의 상수를 저장하는 데이터 타입이다.

열거 타입 변수를 선언하기 위해서는 별도로 소스파일 (.java)를 생성해야한다. (int a = 99; 처럼 간단하지가 않음 ㅠ)

 

 

1) 열거 타입 변수 명은 무엇으로 할 것인지 정하기. 관례적으로 앞글자만 대문자고 나머진 소문자. 예: Week

2) Week.java라는 코드 파일 별도 생성/저장. 작성 방법은 아래 코드 블락 처럼.

   열거 타입이 가진 요소들이 열거 상수인데. 열거 상수는 모두 대문자로 쓰는 것이 관례다. 

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

3) 열거 타입이 만들어 졌으니, 이제 열거 변수를 선언하고 값을 저장하자. <타입 변수명 = 타입.열거상수;> 형태로 하면 된다.

    변수이긴 하지만 선택 옵션이 무궁무진하지 못하다. 열거 상수 7가지 중 하나를 택해야한다.

Week today = Week.FRIDAY;
Week yesteray = Week.THURSDAY;

정리하자면: Week = 열거 타입, today = 열거 변수, FRIDAY = 열거 상수

 

열거상수는 메소드 영역에 생성된다. (작성된 .java 소스파일이 → .class로 로딩되기 때문).

  참고로, today는 열거 변수로서 스택 영역에 있다.

열거 객체인 Week은 힙영역에 생성되는데, 메소드영역의 열거상수들은 힙영역의 자신의 객체들을 참조한다.

   FRIDAY는 Week.FRIDAY를 참조하고, SUNDAY는 Week.SUNDAY를 참조.

   여기서 힙영역의 Week.FRIDAY는 메소드영역의 FRIDAY와 동일한 문자열을 가지고 있다.

   7개의 열거상수가 7개의 Week객체를 가리키고 있다.

 

 

 

열거 타입은 참조 타입이다. 참조 타입 변수란 객체를 참조하는 변수를 말한다. 즉 열거 타입 변수인 today가 참조하는 Week.FRIDAY는 객체이다. 열거 상수가 바로 객체라는 소리이다.

열거 타입 Week의 경우 MONDAY~SUNDAY의 총 7가지 객체로 구성되어 있는 셈이다.

(열거 타입 Week이 객체가 아니라 열거 타입으로 만들어진 열거 변수가 참조하는 열거 상수 FRIDAY가 객체다)

 

 

Note that: 열거상수는 메소드 영역에 생성된다. (.java → .class로 로딩되기 때문)

열거 변수 today는 스택영역에 생성된다. today에 저장되는 값은 Week.FRIDAY 열거 상수가 참조하는 객체의 번지이다. 

따라서, 열거 상수 Week.SUNDAY와 today 변수는 서로 같은 Week 객체(힙영역 위치)를 참조한다.

 

 

 

◆ 열거 객체 메소드들

-name() : 열거 객체의 문자열 리턴

-ordinal() : 열거 객체의 순번 리턴 (0번째부터 시작)

-compareTo() : 열거 객체를 비교하여 순번 차이를 리턴

-valueOf(String name) : 주어진 문자열의 열거 객체 리턴

-values() : 모든 열거 객체들을 배열로 리턴