본문 바로가기
Old Posts/Java

[Java] 열거 타입(Enum) 사용법 및 예제

by A6K 2021. 6. 29.

프로그래밍 언어에서는 열거 타입을 제공하는 경우가 많다. 요일이나 계절처럼 한정된 개수의 값들을 하나로 묶어서 사용하고 싶을 때, 열거 타입을 사용하면 편하다. 자바에서는 Enum 타입을 통해서 이런 종류의 데이터를 사용할 수 있다.

enum 사용법

enum 선언

enum Day {
	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, STURDAY, SUNDAY;
}

enum 타입의 데이터를 선언하기 위해서는 'enum' 키워드를 이용해야한다. enum 키워드 뒤에 열거 타입의 이름을 쓰고, 중괄호를 연 다음 값들을 나열해서 사용하면 된다.

enum의 정의에 나열된 값들은 0부터 순차적으로 1씩 증가하는 값을 갖게 된다. 자바에서는 enum의 값들을 클래스처럼 사용할 수도 있다. 예를 들어

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;
  }
}

이런식으로 클래스처럼 선언해서 사용할 수도 있다.

enum 메소드

values()

enum 타입의 모든 값들을 배열로 만들어 리턴해주는 메소드다.

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

이 코드를 실행하면

이런 결과를 얻는다.

ordinal()

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

Weeks wed = Weeks.WEDNESDAY;

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

순서 값은 배열과 마찬가지로 0부터 시작한다.

valueOf(), name()

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

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

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

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

여기서 리턴되는 문자열을 valueOf()의 인자로 입력하면 역으로 enum 값을 얻어올 수 있다.

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));

인자로 넘겨준 enum 값과 비교해서 전후로 몇 번째에 위치하는지를 나타낸다. 만약 enum 객체의 매개값의 enum 객체보다 순번이 빠르다면 음수가 리턴되고, 같다면 0, 순번이 늦다면 양수가 리턴된다.

댓글