반응형
상수는 원래 final static string과 같이 만든다. 하지만 이렇게 상수를 정의해서 코딩하는 경우 다양한 문제가 발생되어 자바 1.5버전부터 새롭게 추가된 것이 바로 "Enum" 이다.
Enum은 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미한다.
Enum 장점
- 코드가 단순해지며, 가독성이 좋다. 또한 리펙토링 변경 범위가 최소화된다.
- 자바의 열거형은 값과 타입을 모두 체크하기 때문에 하나라도 다르면 컴파일 시점에서 에러가 발생한다. 즉, type safe, 타입에 안정한 열거형을 제공한다.
- 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.
EnumClass는 다른 클래스와 마찬가지로 별도의 java파일, 클래스 안, 클래스 밖에 선언 가능하다.
Enum 특징
열거형으로 선언된 순서(ordinal)에 따라 0 부터 인덱스 값을 가진다. 순차적으로 증가된다. 이는 상수.ordinal()로 불러올 수 있다. 상수 자체는 상수.name()이다.
enum의 이름은 클래스처럼 첫글자가 대문자로 사용하고, 열거형으로 지정된 상수들은 보통 스네이크 표기법의 대문자로 선언한다.
열거형 변수들을 선언한 후 세미콜론(;)은 찍지 않는다.
(상수와 연관된 문자를 연결시킬 경우 세미콜론(;) 찍는다. 맨아래 예제 나와있음.)
주로 사용하는 메소드
enum EnumTest {
HAHA,
HOHO,
YES,
NO
}
메소드 이름 | 사용 예시 | 설명 |
valueOf(String arg) | EnumTest a = EnumTest.valueOf("HAHA"); // HAHA가 나온다. |
String 값을 enum에서 가져옴. 값이 없으면 예외 발생 |
values()E | EnumTest[] a = EnumTest.values(); | eum의 요소들을 순서대로 enum타입의 배열로 리턴. (ENUM$VALUES)의 카피임으로 자주 호출하지 않길 |
name() | EnumTest.YES.name(); // YES 나옴(문자열) |
호출된 값의 이름을 String으로 리턴. |
ordinal() | EnumTest.HAHA.ordinal(); // 0이 나옴 |
해당 값이 enum에 정의된 순서(인덱스)를 리턴. |
compareTo(E o) |
EnumTest.HAHA.compareTo(EnumTest.HOHO) // -1이 나옴
|
enum과 지정된 객체의 순서(ordinal)를 비교. 지정된 객체보다 작은 경우 음의 정수, 동일하면 0, 크면 양의 정수 리턴 ( == 도 사용가능) |
equals(Object other) |
EnumTest.HAHA.equals(EnumTest.HOHO) // false 나옴
|
지정된 객체가 enum 정수와 같은경우, true를 리턴. |
Enum 클래스는 모든 열거형의 부모 클래스이자 추상 클래스이다. 열거형 타입을 좀더 쉽게 다루기 위해 표와같은 메소드를 제공해주고 있다. 주로 values() valueOf()로 상수를 다룰 때 사용된다.
열거형 상수를 다른 값과 연결하기
SoccerTeam.java
enum SoccerTeam {
GK(1, "A"), LB(2, "B"), RB(3, "C"),
LCB(4, "D"), RCB(5, "E"), CM(6, "F"),
RM(7, "G"), LM(8, "H"), LW(9, "I"),
RW(10, "J"), ST(11, "K");
private final int number;
private final String name;
SoccerTeam(int number, String name) {
this.number = number;
this.name = name;
}
public int getNumber() {
return number;
}
public String getName() {
return name;
}
}
Main.java
public class AddingEnumExample {
public static void main(String[] args) {
SoccerTeam[] soccerTeam = SoccerTeam.values();
for (SoccerTeam position : soccerTeam) {
System.out.println("Position : " + position.getNumber()
+ " Name : " + position.getName());
}
}
}
이런식으로 열거형 상수와 관련된 값을 생성자를 통해 연결시킬 수 있다. (이 경우 세미콜론(;)을 붙여야 함)
반응형