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
'JAVA' 카테고리의 다른 글
[JAVA] Public Static 생성자 개념 및 문제점 , static 블록 이용하기 (0) | 2023.04.14 |
---|---|
[JAVA] Collectors 인터페이스 개념 및 사용법 (0) | 2023.04.12 |
[JAVA] 상속 클래스 (super 키워드 관련) (0) | 2023.04.06 |
[JAVA] LocalDate Private 생성자 선언 이유 (0) | 2023.03.06 |
[JAVA] 자료구조 스택(STACK) 클래스 사용해보기 (0) | 2022.12.01 |