목표
자바의 열거형에 대해 학습.
학습할 내용
enum 정의하는 방법
enum이 제공하는 메소드 (values()와 valueOf())
java.lang.Enum
EnumSet
■ 열거형 정의
enum Scale { // 열거 자료형 Scale의 정의
DO, RE, MI, FA, So, RA, TI
}
열거형 값(Enumerated Values)도 레 미 파 솔 라 시 는 열거형 값이다.case문에서는 표현의 간결함을 위해 Do와 같이'열거형 값'의 이름만 명시하기로 약속되어 있다.
■ switch문에서 열거형 활용하기
public static void main(String[] args) {
Scale sc = Scale.DO;
System.out.println(sc);
switch(sc) {
case DO:
System.out.println("도 ");
break;
case RE:
System.out.println("레~ ");
break;
case MI:
System.out.println("미 ");
break;
case FA:
System.out.println("파 ");
break;
default:
System.out.println("~~~");
}
}
위와 같은 방식으로 switch문에 활용할 수 있다.
특이한 점은 레이블에 sc.Do, sc.RE 와 같은 방식이 아닌 열거형 값 하나만 기재한다.
■ 클래스 내에서의 열거형
class Customer {
enum Gender {
MALE, FEMALE
}
private Gender gen;
Customer(String g) {
if(e.equals("man"))
gen = Gender.MALE;
else
gen = Gender.FEMALE;
}
}
클래스 내에서 열거형을 정의하면, 이 클래스 내에서만 사용할 수 이ㅆ다.
즉, 특정 클래스 내에서만 쓰고자 하는 열거형이 있을 때 사용한다.
■ 열거형 생성자에 인자 전달하기
enum Person {
MAN (29), WOMAN( 25);
int age;
private Person(int age) {
this.age = age;
}
@Override
public String toString() {
return "I am " + age + " years old";
}
class EnumParamConstructor {
public static void main(String[] args) {
System.out.println(Person. MAN);
System.out.println(Person.WOMAN);
}
모든 열거형 클래스는 Enum 클래스를 상속한다.
이 Enum 클래스에는 values()와 valueOf() 라는 메서드가 있다.
■ valueOf()
Scanner keyboard = new Scanner(System.in);
String where = keyboard.nextLine();
where = where.toUpperCase();
City dest = City.valueOf(City.class, where);
switch(dest)
{
case SEOUL:
~~
case BUSAN:
~~
case JEJU:
~~
break;
}
City dest = City.valueOf(City.class, where);
첫 번째 인자로 열거형 클래스의 정보를 전달하고
그 후 두 번째 인자로 전달된 문자열에 해당하는 열거형 값 인스턴스를 반환한다.
City.class는 Class라는 클래스의 인스턴스이다.
API 문서를 참조하면 Class 라는 이름의 클래스가 있는데, 이 클래스는 자료형 정보를 표현하기 위한 클래스이다.
즉 City.class는 열거형 클래스인 City의 자료형 정보를 담고 있는 Class 인스턴스의 참조변수이다.
■ values()
열거체의 모든 상수가 들어있는 배열을 반환한다.
enum City {
SEOUL, BUSAN, JEJU;
}
public class EnumTest {
public static void main(String[] args) {
ciryArray[] arr = City.values();
System.out.println("모든 도시 이름");
for (City city : arr) {
System.out.println(city);
}
}
}
모든 열거형은 Enum 클래스를 상속한다.
그리고 Enum 클래스는 당연히 Object 클래스를 상속한다.
참고 서적 : 난 정말 JAVA를 공부한 적이 없어요 (ORANGE MEDIA 윤성우 저)