JAVA

ENUM (열거형) 자료형

bergerac 2025. 3. 23. 09:11

열거형 자료형이란?

  • 서로 관련된 상수들의 집합을 표현하는데 사용한다
  • 서로 유기적인 관계성을 가지며 자바의 클래스로 취급한다.
  • 메서드는 존재하지 않는다. (단지 열거된 자료일 뿐)
  • 클래스의 static final 필드처럼 쓰인다 : 각 상수는 정의된 Enum 타입으로 간주한다.

cf) static final 필드 처럼 사용되기 때문에 모든 요소를 대문자로 써주는 것이 권장된다.

 

1. ENUM 선언 방법 - enum 키워드 사용

enum Enum명 {}

다음과 같이 선언하며 명명규칙은 클래스와 동일하다

중괄호 내에서 열거할 데이터를 ,로 구분하여 나열한다.

enum Fruits{
    Apple, Banana, Orange
}

<Main method>

Fruits apple = Fruits.Apple;
System.out.println(apple);

 

2. ENUM의 특별한 주요 메서드

1) values() : 열거형의 모든 값을 배열로 반환해준다. 

enum Fruits{
    Apple, Banana, Orange
}
System.out.println(Fruits.values());//[Lchapter16.review.Fruits;@119d7047
for(Fruits fruit : Fruits.values()){
    System.out.println(fruit);
}

values의 경우에는 배열을 반환하게 되는데, 배열은 출력하면 배열의 주소값이 뜨게 된다. 따라서 요소를 출력하고 싶다면 향상된 for문을 이용하여 요소값을 출력할 수 있다.

 

2) names() : Enum상수의 이름을 문자열로 반환해준다.'

String appleName = Fruits.Apple.name();
System.out.println(appleName.toLowerCase());

3) valueOf(String name) : 문자열로 Enum 상수 (0부터 시작)를 반환한다.

잘못된 문자열을 보낼 경우 IllegalArgumentException 발생한다.

Fruits orange = Fruits.valueOf("Orange");

 

 4)ordinal() : Enum 상수의 순서를 반환한다. (0부터 시작한다.)

System.out.println(orange.ordinal());

orange 의 경우에는 세번째에 있었으므로 2가 출력된다. (인덱스는 0부터 시작하기 때문에 0,1,2)

 

3. 클래스를 활용한 Enum

enum CoffeeSize{
    SMALL(200), MEDIUM(300), LARGE(450), VENTI(760);
    private final int ml;

    CoffeeSize(int ml) {
        this.ml = ml;
    }

    public int getMl(){
        return ml;
    }
}

**반드시 위에서 초기화를 시켜줘야 한다.

 

CoffeeSize size = CoffeeSize.MEDIUM;
System.out.println(size+"의 용량은"+size.getMl()+"입니다.");

CoffeeSize anotherSize = CoffeeSize.LARGE;
System.out.println(anotherSize+"의 용량은"+anotherSize.getMl()+"입니다.");

<실행결과>

MEDIUM의 용량은300입니다.
LARGE의 용량은450입니다.

 

4. Enum Method Overriding

예시 1)

Enum은 상수별 다른 동작 정의가 가능하다

abstract method를 선언하고 상수별로 구현이 가능하다.

enum Operation{
    ADD{
        public int apply( int x, int y ){
            return x+y;
        }
    },
    SUBSTRACT{
        public int apply( int x, int y ){
            return x-y;
        }
    },
    MULTIPLY{
        public int apply( int x, int y ){
            return x*y;
        }
    };
    public abstract int apply(int x, int y);
}

위와 같이 ADD( 덧셈), SUBSTRACT(뺄샘), MULTIPLY(곱셈)을 정의해준다면 상수별로 구현이 가능하다. 메인메서드에서는 다음과 같이 활용할 수 있다.

public class C_EnumOverriding {
    public static void main(String[] args) {
        System.out.println(Operation.ADD.apply(5,3));
        System.out.println(Operation.SUBSTRACT.apply(5,3));
        System.out.println(Operation.MULTIPLY.apply(5,3));
    }
}

 

예시 2)

enum Season{
    SPRING("봄"), SUMMER("여름"),AUTUMN("가을"),WINTER("겨울");

    private final String seasonName;


    Season(String seasonName) {
        this.seasonName = seasonName;
    }

    public String getSeasonName() {
        return seasonName;
    }
}

<Main method>

Season season = Season.WINTER;
switch (season){
    case SPRING:
        System.out.println("vom vom vom");
        break;
    case SUMMER:
        System.out.println("한여름밤의 꿀");
        break;
    case AUTUMN:
        System.out.println("나 가을 타나봐");
        break;
    case WINTER:
        System.out.println("징글벨 징글벨");
        break;
}

<실행 결과>

징글벨 징글벨

 

 

'JAVA' 카테고리의 다른 글

DTO, VO, DAO, Entity  (1) 2025.03.24
Wrapper Class  (1) 2025.03.22
Stream API  (1) 2025.03.21
메서드 참조 (Lambda)  (0) 2025.03.20
람다식(Lambda) - 함수형 인터페이스 4가지(Predicate, Function, Consumer, Supplier)  (1) 2025.03.19