[작성일: 2023. 02. 08]
열거형(enum)
- 관련된 상수들을 같이 묶어놓은 것. Java는 타입에 안전한 열거형을 제공함.
class Card {
enum CLOVER, HEART, DIAMOND, SPADE } // 열거형 Kind를 정의
enum Value { TWO, THREE, FOUR } // 열거형 Value를 정의
0 1 2
final Kind kind; // 타입이 int가 아닌 Kind 임에 유의해야 함.
final Value value;
}
if(Card.CLOVER==Card.TWO) // true가 나오지만 false여야 의미상 맞음.
if(Card.Kind.CLOVER==Card.Value.TWO) // 컴파일 에러. 타입이 달라서 비교 불가능
열거형의 정의와 사용
✏️ 열거형을 정의하는 방법
enum 열거형이름 { 상수명1, 상수명2, ... }
enum Direction { EAST, SOUTH, WEST, NORTH }
✏️ 열거형 타입의 변수를 선언하고 사용하는 방법
class Unit { int x, y; Direction dir; // 열거형 인스턴스 변수 선언 void init() { dir = Direction.EAST; // 유닛의 방향을 EAST로 초기화 } }
✏️ 열거형 상수의 비교에 ==와 compareTo() 사용가능if(dir==Direction.EAST) { x++; } else if (dir > Direction.WEST) { // 에러. 열거형 상수에 비교연산자 사용불가 ... } else if (dir.compareTo(Direction.WEST) > 0) { // compareTo()는 가능. ... }
열거형의 조상 - java.lang.Enum
- 모든 열거형은 Enum의 자손이며, 아래 메서드를 상속받음.
- values(), valueOf()는 컴파일러가 자동으로 추가해 줌.
메서드 | 설명 |
Class<E> getDeclaringClass() - 잘 안 씀 | 열거형의 Class 객체(설계도) 반환 |
String name() | 열거형 상수의 이름을 문자열로 반환 |
int ordinal() | 열거형 상수가 정의된 순서를 반환(0부터 시작) |
T valueOf(Class<T> enumType, String name) | 지정된 열거형에서 name과 일치하는 열거형 상수를 반환 |
static E[] values() - 컴파일러 자동추가 | Direction[] dArr = Direction.values(); 열거형의 모든 상수를 배열로 반환 |
static E valueOf(String name) - 컴파일러 자동추가 | Direction d = Direction.valueOf("WEST:"); |
열거형에 멤버 추가하기
- 불연속적인 열거형 상수일 경우, 원하는 값을 괄호() 안에 적음. (여러 개도 가능)
- 괄호()를 사용하려면 인스턴스 변수와 생성자를 새로 추가해줘야 함..
- 열거형의 생성자는 묵시적으로 private이므로 외부에서 객체생성 불가능.
enum Direction {
EAST(1), SOUTH(5), WEST(-1), NORTH(10); // 끝에 세미콜론 추가해줘야 함.
private final int value; // 정수를 저장할 인스턴스 변수 추가, iv 선언
Direction(int value) { this.value = value; } // 생성자 추가
public int getValue() { return value; }
}
🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.