열거 타입(Enum)?
서로 관련이 있는 상수 집합을 정의하는 자바에서 제공하는 열거형 타입
* 참고
상수는 대소문자로 모두 작성이 가능하지만, 관례적으로 대문자로 작성
장점
더보기
- 타입 안정성
- 컴파일 시점에 타입 검사를 받기 때문에 런타임 시점에 발생할 수 있는 오류를 사전에 방지할 수 있다.
- 가독성
- 이름을 사용하여 가치를 의미적으로 나타낼 수 있으므로 코드의 의도를 쉽게 파악할 수 있다.
- 유지보수성
- 상수가 변경될 때, 해당 값을 참조하는 모든 코드를 수정해야 하는 번거로움이 있다. 하지만 Enum을 사용하면 상수 값을 변경하는 것만으로 프로그램 전체에 해당 값을 참조하는 모든 코드가 변경된다.
- 코드 안전성
- Enum은 상수를 캡슐화하기 때문에 상수가 의도치 않게 변경되는 것을 방지하며 싱글톤 디자인 패턴을 구현하는 데 사용될 수 있으므로 객체의 생성을 제어할 수 있다.
- 확장성
- Enum은 클래스와 유사한 구조를 갖고 있기 때문에 인터페이스를 구현하거나 메서드를 추가하는 등의 확장이 가능하다.
열거형 정의 및 사용법
Intellij 에서는 디렉터리 우클릭 New - Java Class를 선택하면 아래와 같이 Class, Interface, Enum, Annotaion중 Enum을 선택하여 생성할 수 있다.
문법
// 상수 값 정의
enum 열거형 이름 {상수1, 상수2, 상수3 .....}
// 사용 방법
열거형이름.상수이름
example(basic)
public enum Rainbow {
RED, ORANGE, YELLOW, GREEN, BLUE, NAVY, PURPLE
}
public class EnumExample {
public static void main(String[] args) {
Rainbow rainbow = Rainbow.GREEN;
System.out.println(rainbow); // GREEN 출력
}
}
위의 예제처럼 상숫값을 정의하면 첫 번째 상숫값의 인덱스는 0부터 설정되며 다음 상숫값은 1씩 증가하도록 설정된다.
example(random)
public enum RandomRainbow {
RED(1), ORANGE(2), YELLOW(3), GREEN(4), BLUE(5), NAVY(6), PURPLE(7);
private final int value;
RandomRainbow(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
상숫값에 괄호를 붙여 임의로 인덱스 값을 명시할 수 있다. 하지만 이때는 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 추가해야 한다.
주요 Enum 메서드
Return Type | Method | Description |
열거 배열 | values() | 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환 |
열거 타입 | valueOf(String name) | 전달된 문자열과 일치하는 해당 열거체의 상수를 반환 |
String | name() | 해당 열거체 상수의 이름을 반환 |
int | ordinal() | 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환 |
int | compareTo(E o) | 주어진 매개 값과 비교하여 순번 차이를 반환 |
Enum
public enum Rainbow {
RED, ORANGE, YELLOW, GREEN, BLUE, NAVY, PURPLE
}
values()
Rainbow[] rainbowArr = Rainbow.values();
for (Rainbow rainbow : rainbowArr)
System.out.println(rainbow);
// Output
RED
ORANGE
YELLOW
GREEN
BLUE
NAVY
PURPLE
열거 타입의 모든 열거 객체들을 배열로 생성하여 반환
valueOf(String name)
Rainbow rainbow = Rainbow.valueOf("RED");
System.out.println("valueOf(\"RED\"): " + rainbow);
// Output
valueOf("RED"): RED
매개 값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 반환
name()
Rainbow rainbow = Rainbow.BLUE;
String name = rainbow.name();
System.out.println("name(): " + name);
// Output
name(): BLUE
열거 객체가 가지고 있는 문자열을 반환
ordinal()
Rainbow rainbow = Rainbow.YELLOW;
System.out.println("ordinal(): " + rainbow.ordinal());
// Output
ordinal(): 2
전체 열거 객체 중 몇 번째 인덱스의 열거 객체인지 정수형 타입으로 반환
compareTo(E other)
Rainbow rainbow1 = Rainbow.RED;
Rainbow rainbow2 = Rainbow.PURPLE;
int result1 = rainbow1.compareTo(rainbow2);
int result2 = rainbow2.compareTo(rainbow1);
System.out.println("result1: " + result1);
System.out.println("result2: " + result2);
// Output
result1: -6
result2: 6
Reference.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Enum.html
'Programming > Java' 카테고리의 다른 글
[Java] 상속 (0) | 2024.05.01 |
---|---|
[Java] 변수의 타입을 확인하는 방법 (0) | 2023.05.02 |
[생활 코딩] JAVA1 (0) | 2022.11.16 |
[Java] 문자열 비교 ==, equals() (0) | 2022.07.21 |
[Java] Java 소개 (0) | 2022.07.18 |