열거형(enum)
2023. 5. 9. 20:49ㆍJava Study Note
반응형
1. 개념: 관련된 상수들의 집합이다. Java는 타입에 안전한 열거형을 제공.
열거형은 주로 서로 연관된 상수들을 그룹으로 묶어 사용하거나,
상수값의 오류를 방지하고 코드 가독성을 높이는 등의 목적으로 사용됩니다.
2. 장점: 자바의 열거형은 값과 타입을 모두 체크한다.
class Card{
static final int CLOVER = 0; // 문의
static final int HEART = 1;
static final int Two = 0; // 숫자
static final int Three = 1;
final int kind;
final int num;
}
if(Card.CLOVER == Care.Two) // true이지만 false이어야 의미상 맞음
// 열거형(enum)으로 변환하기
class Card{
enum Kind{CLOVER, HEART}
enum Value{Two, Three}
final Kind kind;
final Value value;
}
if(Card.Kind.CLOVER == Care.Value.Two){} // 컴파일 에러 타입이 달라서 비교 불가
3. 열거형의 정의와 사용
// 열거형을 정의하는 방법
// enum 열거형이름 {상수명1,상수명2,...}
enum Direction {EAST, SOUTH, WEST, NORTH}
// 열거형 타입의 변수를 선언 및 사용
class Unit {
int x,y; // 유닛의 위치
Direction dir; // 열거형 인스턴스 변수를 선언. 위에서 enum Direction{}의 4개 값 중 1개만 들어갈 수 있다.
void init(){
dir = Direction.EAST;// 유닛의 방향을 EAST로 초기화.위에서 enum Direction{}의 4개 값 중 1개만 들어갈 수 있다.
}
}
4. 열거형 상수의 비교
| 사용가능 | 사용불가 |
| == | equal() |
| compareTo() | < , > (비교연산자) |
if(dir == Direction.EAST){
x++;
} else if(dir > Direction.WEST){
// 에러. 열거형 상수에 비교연산자 사용불가
} else if(dir compareTo(Direction.WEST) > 0){
// compareTo()는 가능
}
5. 열거형의 조상 - java.lang.Enum
* 모든 열거형의 조상은 java.lang.Enum이며, 아래의 메서드를 상속받는다.

* valuew(), valueOf()는 컴파일러가 자동으로 추가
static E[] values()
static e valueOf(String name)
6. 열거형에 멤버 추가하기
* 불연속적인 열거형 상수의 경우, 원하는 값을 괄호()안에 적는다.
enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10) }
// OR
enum Direction { EAST(1, ">"), SOUTH(5,"V"), WEST(-1,"<"), NORTH(10,"^") }
* 괄호()를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야 한다.
enum Direction {
EAST(1), SOUTH(5), WEST(-1), NORTH(10);
private final int value; // 정수를 저장할 필드(인스턴스 변수)를 추가
Direction (int value) {
this.value = value; // 생성자를 추가
}
//외부에서 이 값을 얻을 수 있게 getValue()추가
public int getValue(){
return value;
}
}
Direction d - new Direction(1); // 에러, 열거형의 생성자는 외부에서 호출불가
// 열거형의 생성자는 제어다가 묵시적으로 private이기 때문이다.
enum Direction{
Direction(int value){
// private Direction(int value)와 동일하다.
}
}반응형
'Java Study Note' 카테고리의 다른 글
| 💥 Java + MSSQL API 호출 시 자주 발생하는 SQL 오류 정리 (1) | 2025.07.08 |
|---|---|
| Spring 시작 Day2 (0) | 2023.02.05 |
| Spring 시작 Day1 (0) | 2023.02.04 |
| 2진법, 10진법, 16진법, bit (0) | 2023.02.01 |
| 연산자와 피연산자 (0) | 2023.01.24 |