본문 바로가기

카테고리 없음

#19 Enum

열거형 enum은 상수를 의미별로 함께 묶어서 사용하고자 할 때 주로 사용된다. 예를들면 일, 월, 화, 수, 목, 금, 토와 같이 요일을 하나로 묶어 관리할 수 있으며, 데이터 값의 의미를 명확하게 전달할 수 있다

 

열거형 enum은 상수로 구성된 특별한 클래이다. 클래스처럼 변수와 메소드를 가질 수 있지만, 상속이나 인스턴스를 생성할 수는 없으며, enum 값은 상수로 public, static, final 속성을 가지고 있어 변경될 수 없다.

 

 

 

장점

데이터 값의 의미를 명확히 알 수 있다. 
컴파일 시 데이터 타입 및 유효성 체크를 할  수 있다. 

 

선언방법

열거형은 enum 키워드를 사용하여 정의하며, 열거형의 이름은 보통 클래스명과 같이 첫 글자를 대문자로 시작한다.

{ } 안에 열거값은 , 로 구분하며 상수와 같이 대문자를 사용한다. 
열거형의 선언은 클래스 안에서도 선언할 수 있고, 클래스 밖에서도 선언할 수 있다. 

 

 

메서드 종류

valueOf(String str) : 문자열 str과 일치하는 열거값을 반환합니다. 
values( ) : 열거값 전부를 배열로 반환합니다. 
ordinal( ) : 열거값의 순서를 반환합니다

 

 

예제

enum Day {
	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, STURDAY, SUNDAY;
}
public enum Weeks {
  MONDAY("mon", 10),
  TUESDAY("tue", 20),
  WEDNESDAY("wed", 30),
  THURSDAY("thu", 40),
  FRIDAY("fri", 50), 
  STURDAY("sat", 60),
  SUNDAY("sun", 70);
  
  private final String name;
  private final int value;
  
  private Weeks(String name, int value) {
  	this.name = name;
    this.value = value;
  }
  
  public String getName() {
  	return this.name;
  }
  
  public int getValue() {
  	return this.value;
  }
}

 

 

for (Weeks week : Weeks.values()) {
	System.out.println(week.getName());
}

 

결과---------------------------------------

mon

tue

wed

thu

fri

sat

sun

 

 

 

 

oridinal() 메서드는 전체 enum 중 현재 값이 몇번째인지 알려준다

Weeks wed = Weeks.WEDNESDAY;

System.out.println(wed.ordinal());

결과---------------------------------

2

 

 

 

 

valueOf() 메서드는 문자열을 이용해서 enum 값을 얻어오는 메서드

Weeks week = Weeks.valueOf("MONDAY");
System.out.println(week.getName());

결과-------------------

mon

 

 

 

 

name() 메서드는 반대로 enum 타입의 값이 가지고 있는 문자열을 리턴한다

Weeks week = Weeks.valueOf("MONDAY");
System.out.println(week.name());

결과-------------------

MONDAY

 

 

 

 

compareTo() 는 두 enum 값을 비교할 수 있다

Weeks mon = Weeks.MONDAY;
Weeks tue = Weeks.TUESDAY;
Weeks wed = Weeks.WEDNESDAY;
Weeks thu = Weeks.THURSDAY;

System.out.println(mon.compareTo(Weeks.TUESDAY));
System.out.println(tue.compareTo(Weeks.TUESDAY));
System.out.println(wed.compareTo(Weeks.TUESDAY));
System.out.println(thu.compareTo(Weeks.TUESDAY));

결과-------------------

-1

0

1

2

 

인자로 넘겨준 enum 값과 비교해서 전후로 몇 번째에 위치하는지를 나타낸다

만약 enum 객체의 매개값이 enum 객체보다 순번이 빠르다면 음수가 리턴되고

같다면 0, 늦으면 양수가 리턴 됨