logo

자바의 열거형

Java에서 열거형(enums)은 명명된 상수 그룹을 정의하는 데 사용되는 특수 유형입니다.

  • 열거형은 정수 값에 의미 있는 이름을 할당하여 프로그램의 가독성 유지 관리 및 유형 안전성에 도움이 됩니다.
  • 길찾기 요일 등과 같은 항목에 대해 가능한 값이 작은 경우 주로 유용합니다.

열거형 만들기

통사론:



열거형 EnumName {

상수1 상수2 상수3;

}



모니터 크기를 결정하는 방법
Java
enum TrafficLight {  RED GREEN YELLOW; } public class Test{    public static void main(String[] args){    TrafficLight x = TrafficLight.RED;  System.out.println(x);  } } 

산출
RED 

Java에서 열거형 선언

Enum 선언은 클래스 외부나 클래스 내부에서 수행할 수 있지만 메서드 내부에서는 수행할 수 없습니다.

1. 클래스 외부 선언

위의 예제에서 보았듯이 열거형은 클래스 외부에서 선언되고 직접 액세스될 수 있습니다.

2. 클래스 내부 선언

열거형은 클래스 내부에서 선언할 수도 있지만 메서드 내부에서는 선언할 수 없습니다.



Java
public class Test {  enum Color {  RED  GREEN  BLUE;  }  // Driver method  public static void main(String[] args) {  Color c1 = Color.RED;  System.out.println(c1);  } } 

산출
RED 

Java의 Enum 속성

아래에 언급된 것처럼 Enum 뒤에는 특정 속성이 있습니다.

  • 수업 유형: 내부적으로 클래스로 구현됩니다.
  • 열거형 상수: 각 상수는 enum 유형의 객체입니다.
  • 스위치 지원: 스위치 문에서 사용할 수 있습니다.
  • 암시적 수정자: 상수는 공개 정적 최종입니다.
  • 계승: 열거형은 클래스를 확장할 수 없지만 인터페이스를 구현할 수 있습니다.

Switch 문의 열거형

열거형은 열거형 상수에 따라 다양한 사례를 처리하기 위해 스위치 문에서 사용할 수 있습니다.

Java
import java.io.*; class GFG{    // Enum Declared  enum Color {  RED  GREEN  BLUE  YELLOW;  }  public static void main(String[] args){    Color var_1 = Color.YELLOW;  // Switch case with Enum  switch (var_1) {  case RED:  System.out.println('Red color');  break;  case GREEN:  System.out.println('Green color');  break;  case BLUE:  System.out.println('Blue color');  break;  default:  System.out.println('Other color');  }  } } 

산출
Other color 

메서드와 생성자가 포함된 열거형

열거형에는 각 상수에 대해 별도로 실행되는 생성자와 메서드가 있을 수 있습니다.

ABS C 코드
Java
enum Color{  RED GREEN BLUE;  private Color(){    System.out.println('Constructor called for: ' + this);  }  public void display(){    System.out.println('Color is: ' + this);  } } public class Test{    public static void main(String[] args){    Color c1 = Color.RED;  c1.display();  } } 

산출
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED 

추상 메서드가 포함된 열거형

열거형은 각 상수가 구현해야 하는 추상 메서드를 선언할 수 있습니다.

Java
enum Day{    MONDAY{    public String getNumber(){  return '1st day';     }  }  FRIDAY{    public String getNumber(){  return '5th day';     }  };    public abstract String getNumber(); } public class EnumTest {  public static void main(String[] args){    System.out.println(Day.MONDAY.getNumber());   System.out.println(Day.FRIDAY.getNumber());  } } 

산출
1st day 5th day 

value()를 사용하여 열거형 반복

모든 열거형 상수를 반복하려면 EnumType.values()를 사용하세요.

Java
enum Color{  RED GREEN BLUE;   } public class Test{    public static void main(String[] args){    for (Color c : Color.values()){    System.out.println(c);  }  } } 

산출
RED GREEN BLUE 

Enum 및 EnumSet(특정 범위 반복)

EnumSet.range()를 사용하면 열거형 상수의 특정 범위에 대한 반복이 가능합니다.

Java
import java.util.EnumSet; public class EnumSetExample{    enum Day{    SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY;     }  public static void main(String[] args){    EnumSet<Day> workDays = EnumSet.range(Day.TUESDAY Day.FRIDAY);  for (Day d : workDays){    System.out.println(d);  }  } } 

산출
TUESDAY WEDNESDAY THURSDAY FRIDAY 

Enum 멤버를 사용하여 클래스 만들기

열거형을 일반 클래스와 결합하여 프로그램 논리를 구성할 수 있습니다. 열거형은 클래스의 멤버 변수일 수 있으며 메서드는 열거형 값을 기반으로 작업을 수행할 수 있습니다.

Java
/*package whatever //do not write package name here */ import java.io.*; enum Day {  MONDAY  TUESDAY  WEDNESDAY  THURSDAY  FRIDAY  SATURDAY  SUNDAY } public class EnumTest {  // Enum member variable  Day day;  // constructor which takes enum value  public EnumTest(Day day) { this.day = day; }  // method to execute action as per enum value  public void tellItLikeItIs()  {  switch (day) {  case MONDAY:  System.out.println('Mondays are tough');  break;  case TUESDAY:  System.out.println('Tuesday are better');  break;  case WEDNESDAY:  System.out.println('Wednesday are okay');  break;  case THURSDAY:  System.out.println('Thursdays are hopeful');  break;  case FRIDAY:  System.out.println('Fridays are exciting');  break;  case SATURDAY:  System.out.println('Saturdays are relaxing');  break;  case SUNDAY:  System.out.println('Sunday are for rest');  break;  default:  System.out.println('Everyday are good');  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();  } } 

산출
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest 

설명:

  • 위 코드의 EnumTest 클래스는 Day 유형의 멤버로 생성됩니다. Day enum을 인수로 사용하여 할당하는 생성자가 있습니다.
  • 클래스에는 일 값을 기반으로 메시지를 인쇄하는 TellItLikeItIs() 메소드가 있습니다.
  • 기본 메소드에는 다양한 Day 열거형 값을 사용하고 각각에 대해 TellItLikeItIs() 메소드를 호출하는 EnumTest의 객체가 포함되어 있습니다.

메모: EnumTest는 열거형이 아닌 일반 클래스이므로 new 키워드가 사용되므로 인스턴스를 만들고 열거형 값을 해당 생성자에 전달합니다.