가자미의 개발이야기

자바 열거형 본문

Java/자바 기본 문법

자바 열거형

가자미 2021. 2. 3. 17:51

-이전 방식의 열거형

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
interface Animal{
    int DOG =1;
    int CAT =2;
}
 
interface Person{
    int MAN =1;
    int WOMAN =2;
}
 
public class PastJava {
    public static void main(String[] args) {
        who(Person.MAN);//정상적 호출
        who(Animal.DOG);//비정상적 호출
        //두번째 오류가 컴파일 및 실행 과정에서 드러나지 않음!!!
    }
    public static void who(int man) {
        switch(man) {
        case Person.MAN:
            System.out.println("남성손님입니다.");
            break;
        case Person.WOMAN:
            System.out.println("여성손님입니다.");
            break;
        }
    }
}
 
}
cs
 
-열거형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
enum Animal{
    DOG,CAT
}
enum Person{
    MAN, WOMAN
}
 
public class PastJava {
    public static void main(String[] args) {
        who(Person.MAN);//정상적 호출
        who(Animal.DOG);//비정상적 호출
        //컴파일 에러로 분별할 줄 알게 됨!!
    }
    public static void who(Person man) {
        switch(man) {
        case MAN:
            System.out.println("남성손님입니다.");
            break;
        case WOMAN:
            System.out.println("여성손님입니다.");
            break;
        }
    }
}
 
cs

 

-클래스 내에서 열거형을 정의 할 경우 클래스 내부에서만 사용가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class PastJava {
    enum Animal{
        DOG,CAT
    }
    enum Person{
        MAN, WOMAN
    }
    public static void main(String[] args) {
        who(Person.MAN);//정상적 호출
        who(Animal.DOG);//비정상적 호출
        //컴파일 에러로 분별할 줄 알게 됨!!
    }
    public static void who(Person man) {
        switch(man) {
        case MAN:
            System.out.println("남성손님입니다.");
            break;
        case WOMAN:
            System.out.println("여성손님입니다.");
            break;
        }
    }
}
cs

 

-열거형의 값은 인스턴스이다!
-열거형의 생성자는 무조건 private다.
-따라서 new로 생성할 수 없고 열거형 요소로 인스턴스 생성해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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.";
    }
}
 
 
public class PastJava {
    public static void main(String[] args) {
        System.out.println(Person.MAN);
        System.out.println(Person.WOMAN);
    }
}
cs

열거형의 조상 - java.lang.Enum

메서드 설명
class<E> getDeclaringClass() 열거형의 클래스 객체반환
String name() 열거형 상수의 이름을 문자열로 반환
int ordinal() 열거형 상수가 정의된 순서를 반환
T valueOf(Class<T> enum Type, String name) 지정된 열거형에서 name과 일치한 상수 반환