자바의 열거형
Java에서 열거형(enums)은 명명된 상수 그룹을 정의하는 데 사용되는 특수 유형입니다.
- 열거형은 정수 값에 의미 있는 이름을 할당하여 프로그램의 가독성 유지 관리 및 유형 안전성에 도움이 됩니다.
- 길찾기 요일 등과 같은 항목에 대해 가능한 값이 작은 경우 주로 유용합니다.
열거형 만들기
통사론:
Java열거형 EnumName {
상수1 상수2 상수3;
}
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
메서드와 생성자가 포함된 열거형
열거형에는 각 상수에 대해 별도로 실행되는 생성자와 메서드가 있을 수 있습니다.
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 키워드가 사용되므로 인스턴스를 만들고 열거형 값을 해당 생성자에 전달합니다.