Last Modified 2019.3.4
enum
enum 타입은 자바 5에 도입되었다.
- 허용 가능한 값을 제한한다.
- 값을 추가해도 수정해야 할 코드의 양이 최소화할 수 있다.
- 자바 enum은 클래스다.
enum 타입은 상수 집합 정의를 위한 특별한 데이터 타입이다.
enum 선언은 클래스를 정의한다.
enum 클래스 바디는 메소드와 필드를 포함할 수 있다.
컴파일러는 enum을 생성할 때 자동으로 values() 정적 메소드를 추가한다.
values() 정적 메소드는 enum의 모든 값을 순서대로 저장한 배열을 반환한다.
package net.java_school.examples; public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
package net.java_school.examples; public class EnumTest { Day day; public EnumTest(Day day) { this.day = day; } public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println("Mondays are bad."); break; case FRIDAY: System.out.println("Fridays are better."); break; case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); break; default: System.out.println("Midweek days are so-so."); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); for (Day day : Day.values()) { System.out.println(day); } } }
Mondays are bad. Midweek days are so-so. Fridays are better. Weekends are best. Weekends are best. SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY
값을 가진 enum 상수를 선언하는 방법은 다음과 같다.
- 상수 선언 마지막에 ; 추가
- package-private나 private로 생성자 추가
- 값을 얻기 위한 메소드 추가
package net.java_school.examples; public enum Day { SUNDAY("Sun"), //"Sun"이란 값을 생성자에 전달 MONDAY("Mon"), TUESDAY("Tue"), WEDNESDAY("Wed"), THURSDAY("Thu"), FRIDAY("Fri"), SATURDAY("Sat"); //마지막에 ; 추가 private final String value; //생성자 추가 private Day(String value) { this.value = value; } //값을 얻기 위한 메소드 추가 public String getValue() { return value; } }
enum 상수와 연결된 값은 자바 데이터 타입 중 하나다.
메인 메소드 마지막에 다음을 추가하여 예제를 테스트한다.
System.out.println(Day.MONDAY); System.out.println(Day.MONDAY.getValue()); for (Day day : Day.values()) { System.out.println(day.getValue()); }
Sun Mon Tue Wed Thu Fri Sat
최종 소스 : https://github.com/kimjonghoon/enum
실행 방법
~/enum$ cd src/net/java_school/examples/ ~/enum/src/net/java_school/examples$ javac -d ../../../../bin *.java ~/enum/src/net/java_school/examples$ cd - ~/enum$ java -cp ./bin net.java_school.examples.EnumTest 1. Mondays are bad. Midweek days are so-so. Fridays are better. Weekends are best. Weekends are best. 2. SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY 3. Sun Mon Tue Wed Thu Fri Sat참고