package sec07.exam01_enum;
public class WeekMethodExample {
public static void main(String[] args) {
//name() 메소드
Week today = Week.SUNDAY;
String name = today.name(); //String타입 name에 today의 문자열을 입력
System.out.println(name); //SUNDAY출력
//ordinal() 메소드
int ordinal = today.ordinal();
System.out.println(ordinal); //6 출력
//compareTo() 메소드
Week day1 = Week.MONDAY;
Week day2 = Week.WEDNESDAY;
int result1 = day1.compareTo(day2);
int result2 = day2.compareTo(day1);
System.out.println(result1); //-2 출력
System.out.println(result2); //2 출력
//valueOf() 메소드
Week weekDay = Week.valueOf("SUNDAY"); //문자열 SUNDAY와 같은 열거객체를 찾아 그 주소를 weekDay에 리턴
if(weekDay == Week.SATURDAY || weekDay == Week.SUNDAY) {
System.out.println("주말 이군요"); //주말이군요가 출력
} else {
System.out.println("평일이군요");
}
//values()메소드
Week[] days = Week.values();
for(Week day : days) {
System.out.println(day); //월~일 출력된다.
}
}
}
-열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있다.
-앞에서 편의를 위해 객체 캡슐 안에 문자열만 적었지만,
사실은 열거 객체가 생성 될때, 여러 가지 메서드들도 함께 생성된다.
-위의 메소드들은 java.lang.Enum클래스에 선언된 메소드인데, 열거 객체에서 사용할 수 있는 이유는
모든 열거 타입은 컴파일시 Enum클래스를 자동으로 상속하게 되어있기 때문이다.
이제 메서드들을 하나하나씩 알아보자.
먼저 예시를 들기 위해 먼저 열거 타입 Week을 만들어놓고 시작하자.
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
name()
열거 객체가 가지고 있는 문자열(열거 상수 이름)을 리턴한다.
Week today = Week.SUNDAY;
String name = today.name(); //String타입의 name에는 문자열인 SUNDAY가 저장된다.
ordinal()
전체 열거 객체 중 몇 번째 열거 객체인지 알려준다.
열거 객체의 순번은 열거 타입을 정의할 때 주어진 순번을 말함.
Week을 정의할 때 월화수목금토일 순으로 정의했으므로,
각각 객체들의 순번은 자동적으로 저 순서대로 정의된다.
열거 상수 | 순번 |
MONDAY | 0 |
TUESDAY | 1 |
WEDNESDAY | 2 |
THURSDAY | 3 |
FRIDAY | 4 |
SATURDAY | 5 |
SUNDAY | 6 |
Week today = Week.SUNDAY; //열거타입 변수 today에 열거상수 SUNDAY를 저장
int ordinal = today.ordinal(); //today.ordinal()=6, 정수타입 ordinal 변수에 6을 저장
a.compareTo(b)
매개 값으로 주어진 열거 객체를 기준으로 전후로 몇 번째 위치하는지를 비교
-만약 객체가 매개 값의 열거 객체보다 순번이 빠르면 음수, 순번이 늦으면 양수가 리턴.
-상대적 위치를 리턴하므로 a와 b의 자리가 바뀌면 앞의 부호도 바뀜.
(두 값을 빼는 메서드라고 생각하면 쉽다. 앞에 있는 숫자가 크면 값이 양수가 나오는 것은 당연하다. )
Week day1 = Week.MONDAY; //day1 = 0
week day2 = Week.WEDNESDAY; //day2 = 2
//상대적인 위치를 리턴한다.
int result1 = day1.compareTo(day2); // result1 = -2
int result2 = day2.compareTo(day1); //result2 = 2
valueOf()
매개 값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 리턴
-외부로부터 문자열을 입력받아 열거 객체로 변환할 때 유용하게 사용할 수 있다.
Week weekDay = Week.valueOf("SATURDAY"); //변수 weekDay는 열거타입 Week의 SATURDAY열거 객체를 참조함.
values()
열거 타입의 모든 열거 객체들을 배열로 만들어 리턴한다.
-이때 배열의 인덱스는 열거 객체의 순번과 같음
-인덱스 값은 해당 순번의 열거 객체 번지
만약
Week[] days = Week.values();
for (Week day : days){
System.out.println(day);
}
실행결과:
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
예시
'5. 참조타입' 카테고리의 다른 글
5.7.2_열거 타입 변수 (0) | 2020.05.02 |
---|---|
5.7.1 열거타입 (enumeration type) (0) | 2020.05.01 |
5.6.10_ 향상된 for문 (0) | 2020.05.01 |
5.6.8_객체를 참조하는 배열 (1) | 2020.04.30 |
5.6.7_다차원 배열 (0) | 2020.04.30 |