열거 타입은 한정된 값인 열거 상수 중에서 하나의 상수를 저장하는 타입이다.
데이터 중에는 몇 가지로 한정된 값만을 가지는 경우가 있다. 예를 들면 요일에 대한 데이터는 월, 화, 수, 목, 금, 토, 일이라는 7개의 값만을 갖고, 계절 또한 봄, 여름, 가을, 겨울이라는 4개의 값만 가진다. 이처럼 한정된 값만을 가지는 타입을 열거 타입이라고 한다.
열거 타입 선언
Week.java
MemberList.java
KindOfCoffee.java
위와 같이 열거 타입 소스 파일을 만들 때는 첫 글자는 대문자로, 여러 단어로 나뉜다면 그 단어의 첫 스펠링을 대문자로 해주면 된다.
소스파일을 만들었다면 열거 타입 선언을 해야하는데, public enum 키워드는 열거타입을 선언하기 위한 키워드이며, 반드시 소문자로 작성해야 한다. 열거타입이름은 위에 소스 파일 이름과 대소문자가 일치해야한다.
public enum 열거타입이름 { ... }
열거타입을 선언했다면 열거상수를 선언한다. 열거상수는 열거타입의 값으로 사용되며, 관례적으로 상수는 모두 대문자로 작성한다.
만약 여러 단어로 구성될 경우에는 언더바(_)로 연결하자.
public enum Week {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}
public enum LoginResult {LOGIN_SUCCESS, LOGIN_FAILURE}
열거타입 변수
열거타입도 하나의 타입이므로 변수를 선언하고 사용해야 한다.
Week로 변수를 선언하면 아래와 같이 사용할 수 있다.
Week today;
Week reservationDay;
열거타입 변수를 선언했으면 열거 상수를 사용할 수 있는데
열거 상수는 단독으로 사용할 수 없으며
반드시 "열거타입.열거상수" 형태로 사용해야 한다.
today라는 열거타입 변수에 열거 상수인 SUNDAY를 저장하면 아래와 같다.
또한 열거 타입도 참조 타입이기 때문에 null 값도 저장할 수 있다.
Week today = Week.SUNDAY;
Week birthday = null;
열거 상수는 열거 객체로 생성되기 때문에
열거 타입 변수 Week는 MONDAY ~ SUNDAY까지 7개의 객체로 생성된다.
그리고 메소드 영역에 생성된 열거 상수가 해당 Week 객체를 각각 참조하게 된다.

그렇다면 이 코드는 어떻게 이해해야 할까?
Week today = Week.SUNDAY;
today 변수는 스택 영역에 생성된다. today에 저장되는 값은 Week.SUNDAY 열거 상수가 참조하는 객체의 번지다.
따라서 Week.SUNDAY와 today는 같은 Week 객체를 참조하게 된다.
그렇기 때문에 today 변수와 Week.SUNDAY 상수의 비교연산 == 결과는 true가 된다.

객체 참조에 관하여는 이전 글을 참고하면 좋을 것 같다.
https://doridori-dev.tistory.com/13
[Java] 문자열 비교
문자열을 비교할 때 우리는 비교연산자인 ==과 !=을 자주 사용한다. 하지만 이것과 비슷한 메소드로 equals()라는 메소드가 있다. 이 두 개의 차이는 무엇일까? 문자열을 변수에 저장할 때 우리는
doridori-dev.tistory.com
'백엔드 공부 > Java' 카테고리의 다른 글
| [Java] 자동 타입 변환 (4) | 2023.12.05 |
|---|---|
| [Java] static? (4) | 2023.11.27 |
| [Java] 향상된 for문 (2) | 2023.11.24 |
| [Java] 문자열 비교 (2) | 2023.11.24 |
| Math.random()으로 정수값 뽑기 (0) | 2023.11.22 |