본문 바로가기
Language/JAVA

[JAVA] 자바_enum 클래스 (열거형_enumeration type)

by 썸머워즈 2019. 8. 31.
반응형

- enum 클래스란? -


enum 클래스는 열거체(enumeration type)으로 JDK 1.5 이상의 버전에서만 사용이 가능하다.

 

간단하게 정의하자면 다음과 같다.

- 클래스처럼 보이게 하는 상수
- 서로 관련있는 상수들끼리 모아 상수들을 정의하는것
- enum 클래스 형을 기반으로 한 클래스형 선언

 

그리고 enum 클래스를 사용하기 전에 특징을 알아두는게 좋다.

 

▷ 특징

1. 열거형으로 선언된 순서에 따라 0부터 index 값을 가진다.(순차적으로 증가)
2. enum 열거형으로 지정된 상수들은 모두 대문자로 선언한다.
3. 열거형 변수들을 선언한 후 마지막에 세미콜론(;)을 찍지 않는다.
4. 상수와 특정 값을 연결시킬경우 마지막에 세미콜론(;)을 붙여줘야한다.

 

이제 본격적으로 하나하나 알아가 보도록하자.


열거체 정의

열거체 정의는 enum 클래스용인 java파일로 선언, 타 클래스 내부에 선언, 클래스 외부에 선언 등으로 이용하고는 하는데,

일반적으로 열거체 정의용 java class 파일을 따로 만들어 사용하고는 한다.

 

기본적인 문법은 아래와 같다.

문법 : enum 열거체 이름 {상수1, 상수2, ...}
코드 : enum Company {SK, LG, KT, SAMSUNG, APPLE}
사용법 : Company.APPLE

enum 메서드

Static
Methods
 valueOf(String arg) String 값을 enum에서 가져온다. 값이 없으면 Exception 발생 
valueOf(Class<T> class, String arg)  넘겨받은 class에서 String을 찾아, enum에서 가져온다. valueOf(String arg)는 내부적으로 자기 자신의 class를 가져오는 것이다. 
values()  enum의 요소들을 순서대로 enum 타입의 배열로 리턴한다.
ENUM$VALUES의 카피이므로, 너무 자주 호출하는 것은 좋지 않음 
 Static 아닌
Methods
name()  호출된 값의 이름을 String으로 리턴한다. 
ordinal() 해당 값이 enum에 정의된 순서를 리턴한다. (index 값 리턴)
compareTo(E o)  이 enum과 지정된 객체의 순서를 비교한다. 지정된 객체보다 작은 경우 음의 정수, 동일하면 0, 크면 양의 정수를 반환한다. 
equals(Object other)  지정된 객체가 이 enum 정수와 같은 경우, true를 반환한다. 

 

여기서 주로 사용되는 메서드는 values(), ordinal(), valueOf() 정도다.


예제 1) 열거체 정의 (Company.java)

public enum Company {

    SK("에스케이"),
    LG("엘쥐"),
    KT("케이티"),
    SAMSUNG("삼성"),
    APPLE("애플");
    
    private final String value;
    
    Company(String value){
        this.value = value;
            
    }
    
    public String getValue(){
        return value;
    }

}

* 상수와 특정값을 연결시켜놓은건데 특정값을 연결시키려면 해당 값들을 리턴할 수 있는 함수가 선언되어있어야한다.

 

예제 2) enum 상수와 연결된 값 가져오기

public class TestEnum {

    public static void main(String[] args) {

        for(Company type : Company.values()){
            System.out.println(type.getValue()); // 에스케이, 엘쥐, 케이티, 삼성, 애플
        }
        
        System.out.println(Company.APPLE.getValue()); // 애플
        
    }
    
}

 

예제 3) enum 클래스 메서드 사용 (ft. values(), ordinal())

public class TestEnum {

    public static void main(String[] args) {

        for(Company type : Company.values()){
            System.out.println(type); // SK, LG, KT, SAMSUNG, APPLE
        }

        System.out.println(Company.APPLE.ordinal()); //4

    }
    
}

values() : enum에 선언된 상수를 전부 가져온다. (예제 출력을 위해 for문에 사용)

ordinal() : 해당 상수의 index값을 출력한다.

 

예제 4) switch문 사용

public class TestEnum {

    enum Company { SK, LG, KT, SAMSUNG, APPLE }
    
    public static void main(String[] args) {

        int test = 1;
        
        if(test == 1){
            switchFt(Company.SAMSUNG);
    }...
    
    public static void switchFt(Company company){
        
        switch(company){
        case SK :
            System.out.println("SK 입니다.");
            break;
        case LG :
            System.out.println("LG 입니다.");
            break;
        case KT :
            System.out.println("KT 입니다.");
            break;
        case SAMSUNG :
            System.out.println("SAMSUNG 입니다.");
            break;
        case APPLE :
            System.out.println("APPLE 입니다.");
            break;
        }
        
    }   
}
반응형


댓글

TOP