devnoong.log
728x90

Java에서 주로 사용되는 enum에 대해 정리해보는 시간을 가져보도록 하겠습니다

 

 

1. ENUM이란?

자바 1.5버전부터 새롭게 추가된 열거형 상수로, 서로 연관된 상수들의 집합으로 상수 값을 정의하고, 그 외의 값은 허용하지 않는다.

 

 

enum이 존재하기 전에는 아래와 같이 static final 을 이용하여 모두 상수로 선언해서 사용했었다.

 

public static final String MON = "Monday";
public static final String TUE = "Tuesday";
public static final String WED = "Wednesday";


추가로 같은 의미를 가지는 상수들끼리 묶어서 class or interface로 구현체를 만들어서 사용했으나,
해당 방법은 서로 다른 집합에 정의 된 상수를 비교하고자 할때 컴파일에러가 발생하지 않고 런타임에러가 발생하는 문제가 존재했다.

 

하지만 enum을 사용하면 컴파일단계에서 에러를 잡을 수 있다.

 

 

2. ENUM 사용법

class 와 유사한 형태로 class 대신 enum을 작성해줘서 사용하면 된다.

 

public enum Day {
    MON, TUE, WED, THU, FRI, SAT, SUN
}

 

enum 상수 필드값을 설정하고 싶을 경우에는 생성자를 생성하여 필드값을 설정 할 수 있다.

 

public enum Day {
    MON(1), //생성자를 이용해 필드 값 설정
    TUE(2), 
    WED(3), 
    THU(4), 
    FRI(5), 
    SAT(6), 
    SUN(7)
    
    private final int label; //필드값 변수
    
    Day(int label){ //생성자 생성
      this.label = label;
    }
    
    public int label(){
    	return label; //필드값 호출
    }
}

 

enum 생성자에게 필요한 인수를 전달하면, 각각의 열거형 상수는 해당 생성자를 사용하여 인스턴스화 된다.

이 인스턴스들은 enum 클래스 내부에서 상수로 유지되며, 사용자는 new 연산자를 사용하여 인스턴스를 생성 할 수 없다.

 

public 생성자 없이 오직 정적 팩터리만을 제공하여 인스턴스를 반환한다.

 

생성된 ENUM에 대해 다른 코드에서 호출하는 법은 아래와 같다.

Day Mon = Day.Mon;
System.out.println(Mon.label); // 1 출력

 

3. ENUM 메소드

java에서 enum클래스는 아래의 메소드를 기본적으로 제공한다.

 

 

  • name() : 열거형 상수의 이름을 문자열로 반환한다.(상수명을 이용하여 이름을 출력할 수 있지만, 일관성을 유지하기 위해 name 메서드 사용)
  • origianl() : 열거형 상수의 순서값을 반환한다. (필드값을 반환하는 것이 아니다!!! 0부터 시작)
  • toString() : 기본적으로 name() 과 동일한 값을 반환한다. 하지만 name 메소드와 차이점은 오버라이딩을 통해 반환하는 값의 종류를 다양하게 설정 할 수 있다.
  • valueOf(String name) : 지정된 열거형에서 상수 이름이 일치하는 상수를 반환한다. (대,소문자를 구분)  하지만 문자열이 열거형 상수의 이름과 일치하지 않을 경우 'IlleageArgumentException' 예외가 발생하므로 valueOf 함수를 사용할때는 예외처리를 해줘야 된다.
  • values() : 열거형 상수의 배열을 반환한다.

 

728x90