반응형
예전에는 enum을 잘 사용하지 않다가 최근에서야 enum 클래스를 활용하기 시작했다.
확실히 enum 클래스를 사용하면 코드만 읽고도 의미를 확실하게 알 수 있어 좀 더 좋은 코드가 되는 것 같다.
enum을 좀 더 잘 활용하기 위해서 정리하는 시간을 한번 갖으려고 한다.
Enum이란?
enum클래스는 JDK 1.5에 나온 기능이다.
열거체를 정의할 수 있는 기능으로 상수를 클래스처럼 보이게 해 준다.
장점
- 비교할 때 실제 값뿐만 아니라 타입까지도 체크한다.
- enum의 상숫값이 재 정의되어도 다시 컴파일할 필요가 없다.
enum 정의
enum 열거체이름{
상수1이름, 상수2이름, 상수3이름, ...
}
- 상수를 작성할 때는 대문자를 사용하여 작성한다.
- ;을 붙이지 않는다.
예시
enum Rainbow{
RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}
enum 사용
이렇게 정의한 enum은 다음과 같이 사용할 수 있다.
열거체이름.상수명
예시를 사용한다면
public class Example{
public static void main(String[] args){
String myColor = Rainbow.RED
}
}
enum Rainbow{
RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}
java.lang.Enum 클래스
Enum클래스는 모든 enum의 조상 클래스이다.
Enum에는 다양한 메서드들을 포함하고 있다.
values() 메서드
- 모든 상수를 저장한 배열을 생성하여 반환해 주는 메서드
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum01 {
public static void main(String[] args) {
Rainbow[] arr = Rainbow.values();
for (Rainbow rb : arr) {
System.out.println(rb);
// 실행결과
// RED
// ORANGE
// YELLOW
// GREEN
// BLUE
// INDIGO
// VIOLET
}
}
}
valueOf() 메서드
인자로 전달된 문자열과 일치하는 enum 상수를 반환하는 메서드
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum02 {
public static void main(String[] args) {
Rainbow rb = Rainbow.valueOf("GREEN");
System.out.println(rb); // 결과: GREEN
}
}
ordinal() 메서드
해당 상수가 enum에서 정의된 순서(0부터 시작)를 반환하는 메서드
단순 순서이기 때문에 유의해야 한다. (상수값이 아님!!)
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum03 {
public static void main(String[] args) {
int idx = Rainbow.YELLOW.ordinal();
System.out.println(idx); // 2
}
}
메서드 요약
static E values() | 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환함. |
static E valueOf(String name) | 전달된 문자열과 일치하는 해당 열거체의 상수를 반환함. |
protected void finalize() | 해당 Enum 클래스가 final 메서드를 가질 수 없게 됨. |
String name() | 해당 열거체 상수의 이름을 반환함. |
int ordinal() | 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환함. |
상수에 값 추가하기
상수값을 따로 지정해주지 않으면 0부터 설정되고 1씩 증가하면서 설정되게 된다.
만약 상수값을 따로 지정하고 싶다면 상수이름 옆에 '()'를 추가하여 그 안에 원하는 상숫값을 적어주면 된다.
또한 해당 값을 저장할 수 있는 변수와 생성자를 추가해 주어야 한다.
enum Rainbow {
RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), INDIGO(-1), VIOLET(-11);
private final int value;
Rainbow(int value) { this.value = value; }
public int getValue() { return value; }
}
참고 사이트
http://www.tcpschool.com/java/java_api_enum
반응형
'Language > Java' 카테고리의 다른 글
엑셀 생성 기능 리팩토링하기 (0) | 2023.09.08 |
---|---|
Java 로깅 알아보기 2 - logback (0) | 2023.08.04 |
Java 로깅 알아보기 1 - Logging이란 (0) | 2023.08.04 |
Bean, VO, DTO, Entity 구분하기 (0) | 2023.07.26 |
Gradle을 이용한 순수 자바 Jar 만들기 (0) | 2023.06.20 |