반응형
열거형은 서로 연관된 상수를 편리하게 선언하기 위한 것으로, 여러 상수를 정의할때 사용하기 좋습니다.
서로 연관된 상수라 함은 아래의 간단한 예시 코드처럼
DOOR와 WHEEL은 String 타입으로 서로 연관된 상수라 할 수 있습니다.
enum Car {
DOOR("4개의 문을 가진 차"),
WHEEL("자동차의 바퀴");
}
열거형의 정의와 사용
아래 처럼 중괄호{}안에 상수의 이름을 나열하기만 하면 됩니다.
enum 열거형이름 { 상수명1, 상수명2, .... }
이 열거형에 정의된 상수를 사용하는 방법은 "열거형이름.상수명"으로 클래스의 static 변수를 참조하는 것과 동일합니다.
또한 열거형 상수간의 비교에는 "eqauls()와 "=="를 사용할 수 있는데, "<, >"와 같은 비교연산자는 사용할 수 없고 compareTo()는 사용이 가능합니다.
compareTo()는 두 비교대상이 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수를 반환합니다.
Enum클래스의 메서드
메서드 | 반환 타입 | 설 명 |
getDeclaringClass() | Class<E> | 열거형의 Class 객체를 반환. |
name() | String | 열거형 상수의 이름을 문자열로 반환. |
ordinal() | int | 열거형 상수가 정의된 순서를 반환.(0부터 시작) |
valueOf(Class<T> enum Type, String name) | T | 지정된 열거형에서 name과 일치하는 열거형 상수를 반환. |
values() | Array | 열거형의 모든 상수를 배열에 담아 반환 |
메서드 사용 예제
enum Direction { EAST, SOUTH, WEST, NORTH }
class EnumEx1 {
public static void main(String[] args) {
Direction d1 = Direction.EAST;
Direction d2 = Direction.valueOf("WEST");
Direction d3 = Enum.valueOf(Direction.class, "EAST");
System.out.println("d1="+d1);
System.out.println("d2="+d2);
System.out.println("d3="+d3);
System.out.println("d1==d2 ? "+ (d1==d2));
System.out.println("d1==d3 ? "+ (d1==d3));
System.out.println("d1.equals(d3) ? "+ d1.equals(d3));
// System.out.println("d2 > d3 ? "+ (d1 > d3)); // 비교연산자를 사용할 수 없다.
System.out.println("d1.compareTo(d3) ? "+ (d1.compareTo(d3)));
System.out.println("d1.compareTo(d2) ? "+ (d1.compareTo(d2)));
for(Direction d : Direction.values())
System.out.printf("%s=%d%n", d.name(), d.ordinal());
}
}
열거형에 멤버 추가하기
열거형 상수들이 각자의 값을 가질 경우 아래 처럼 열거형 상수의 이름 다음에 원하는 값을 괄호()와 함께 적어주면 됩니다.
그리고 마지막 상수에는 끝에 세미콜론 ";" 을 붙여줘야 합니다.
enum Direction {
EAST(1, ">"),
SOUTH(2,"V"),
WEST(3, "<"),
NORTH(4,"^");
}
private final int value;
private final String symbol;
Direction(int value, String symbol) {
this.value = value;
this.symbol = symbol;
}
public int getValue() {
return value;
}
public String getSymbol() {
return symbol;
}
그리고 위 값을 저장할 변수를 지정해주고 상수의 값 ( 불변의 값 )이기에 final을 붙여줍니다.
그 다음 생성자를 통해 변수의 값들을 초기화 해주고, 외부에서 이 값을 얻을 수 있게 getter를 추가 해줍니다. ( 열거형의 생성자는 외부에서 호출 불가 )
필요하다면 열거형 상수에 여러 값을 지정할 수 있는데,
추가하게 된다면 그에 맞게 인스턴스 변수와 생성자에 추가 된 값을 추가해주면 됩니다.
참고 자료 : 자바의 정석3
'◼ JAVA' 카테고리의 다른 글
[Java/자바] 정규식(Regular Expression) 사용법 총정리 (2) | 2022.11.28 |
---|---|
[Java/자바] 람다식(Lambda)이란? 그리고 사용법 (4) | 2022.11.27 |
[Java/자바] 프로그래머스 - 소수 찾기 (에라토스테네스의 체) (1) | 2022.11.24 |
[우아한테크코스 백엔드 5기] 프리코스 4주차 후기 (다리 건너기) (0) | 2022.11.23 |
[Java/자바] JUnit5 Assertions 예제 정리 (0) | 2022.11.21 |