본문 바로가기

5. 참조타입

5.7.3_열거 객체의 메소드

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