열거형(enum)

2023. 5. 9. 20:49Java 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