Java에서 특정 값들을 모아 하나의 타입으로 선언할 수 있습니다. 이 타입을 Enum 타입 이라고 합니다.
예를 들어 한 주의 요일들은 (월, 화, 수, 목, 금, 토, 일) 이 있습니다.
이 요일들을 묶어 Week라는 하나의 Enum타입으로 선언할 수 있습니다.
그리고 Week Enum 타입 내의 값들 (월, 화, 수, 목, 금, 토, 일) 을 Enum 상수 라고 합니다.
각 Enum 상수에 해당되는 Week Enum 객체가 Heap 영역에 생성됩니다.
각 Enum 상수들은 자신의 Week Enum 객체를 Method 영역에서 참조합니다.
Enum 타입의 참조변수로 특정 Week Enum 객체를 참조할 수 있습니다.
예를 들어, 다음의 경우를 보겠습니다.
Week today = Week.MONDAY;
참조 변수 today
는 Stack 영역에 저장됩니다.
그리고 이 today
는 Method 영역에 있는 MONDAY 객체
의 주소값을 그대로 참조합니다.
즉, today
와 Week.MONDAY
는 Heap 영역에 있는 같은 Week Enum 타입
의 MONDAY 객체
를 참조합니다.
따라서, 아래의 테스트 코드는 통과합니다.
@DisplayName("Enum 객체는 각 Enum 상수별로 각각 하나씩 생성되고, 참조된다.")
@Test
void enumTypeTest() {
Week thisWeekMonday = Week.MONDAY;
Week nextWeekMonday = Week.MONDAY;
assertThat(thisWeekMonday).isSameAs(nextWeekMonday);
}
참조 : Java Enum이란