[Java] 참조 타입 ③

kiteB·2021년 12월 26일
0

Java

목록 보기
7/35
post-thumbnail

[ 열거 타입 ]

열거 타입은 한정된 값만을 갖는 데이터 타입(enumeration type)이다.
열거 타입은 몇 개의 열거 상수(enumeration constant) 중에서 하나의 상수를 저장하는 데이터 타입이다.

한정된 값을 갖는 데이터의 예시는 다음과 같다.

  • 요일에 대한 데이터는 월, 화, 수, 목, 금, 토, 일이라는 일곱 개의 값만을 갖는다.
  • 계절에 대한 데이터는 봄, 여름, 가을, 겨울이라는 네 개의 값만을 갖는다.

[ 열거 타입 선언 ]

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

1. 열거 타입 이름

열거 타입 이름은 관례적으로 첫 문자를 대문자로 하고, 나머지는 소문자로 구성한다.
만약 여러 단어로 구성된 이름이라면 단어 첫 문자는 대문자로 하는 것이 관례이다.

Week.java
MemberGrade.java
ProductKind.java

2. 열거 타입 선언

소스 파일의 내용의 구조는 다음과 같다.

enum 열거타임이름 {
    열거상수이름1,
    열거상수이름2,
    ...
}
  • enum 키워드는 열거 타입을 선언하기 위한 키워드이다.
  • 열거 타입 이름은 소스 파일명과 대소문자가 모두 일치해야 한다.
  • 열거 상수는 관례적으로 모두 대문자로 작성한다.
    • 만약 열거 상수가 여러 단어로 구성될 경우에는 단어 사이를 언더바(_)로 연결하는 것이 관례이다.

예제

enum Week {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAT,
    SATURDAY,
    SUNDAY
}

[ 열거 타입 변수 ]

열거 타입 변수를 사용하는 방법은 다음과 같다.

열거타입 변수이름;

예제

Week today;
Week reservationDay;

열거 타입 변수를 선언했다면 다음과 같이 열거 상수를 저장할 수 있다.
열거 상수는 단독으로 사용할 수 없으며, 반드시 열거타입.열거상수로 사용된다.

열거타입 변수 = 열거타입.열거상수;

예제

Week today = Week.SUNDAY;

열거 타입 변수는 null 값을 저장할 수도 있다.

Week birthday = null;

[ 열거 객체의 메소드 ]

열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있다.
모든 열거 타입은 컴파일 시에 Enum 클래스를 상속하게 되어 있기 때문에 java.lang.Enum 클래스에 선언된 메소드들을 사용할 수 있다.


1. name()

name() 메소드는 열거 객체의 이름(열거 타입을 정의할 때 사용한 상수 이름)을 반환한다.

Week today = Week.SUNDAY;
String name = today.name;	//name은 "SUNDAY" 

2. ordinal()

ordinal() 메소드는 전체 열거 객체 중 몇 번째 열거 객체인지 알려준다. 순번은 0번부터 시작한다.

  • Week.java
enum Week {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAT,
    SATURDAY,
    SUNDAY
}
Week today = Week.SUNDAY;
int ordinal = today.ordinal;	//ordinal은 6

3. compareTo()

compareTo() 메소드는 매개값으로 주어진 열거 객체를 기준으로 전후로 몇 번째 위치하는지를 비교한다.

열거 객체가 매개값의 열거 객체보다

  • 순번이 빠르다면 음수,
  • 순번이 늦다면 양수가 리턴된다.
Week day1 = Week.MONDAY;
Week day2 = Week.WEDNESDAY

int result1 = day1.compareTo(day2);	//result1은 -2
int result2 = day2.compareTo(day1); 	//result2는 2

4. valueOf()

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

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

weekDay 변수는 Week.SATURDAY 열거 객체를 참조하게 된다.


5. values()

values() 메소드는 열거 타입의 모든 열거 객체들을 배열로 만들어서 리턴한다.

Week[] days = Week.values();
for (Week day : days) {
    System.out.println(day);
}

Week 배열은 다음과 같이 생성된다.
배열의 인덱스는 열거 객체의 순번과 같고, 각 인덱스 값은 해당 순번의 열거 객체 번지이다.

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글