[Java] 자바의 열거형(Enum), 열거형의 활용

sewonK·2022년 10월 14일
0

백기선님 자바 기초 스터디 11주차 과제 질문을 참조하여 포스트를 작성하였습니다.

📌 enum 정의하는 방법
📌 enum이 제공하는 메소드 (values()와 valueOf())
📌 java.lang.Enum
📌 EnumSet

📖 들어가기 전에

Enum을 공부하기 전에는 단순히 연관된 상수들의 묶음을 표현할 때 사용하는 클래스인 줄 알았습니다. 그런데 실제로 개발을 하면서 단순한 상수 이상으로 Enum이 꽤 유용하게 쓰였기도 하고, 사용 과정에서 Enum 활용기 등 유용한 기술 블로그 포스트를 발견하여 이를 기록하려 합니다.

Enum의 개념과 활용기를 정리해보겠습니다.

1. Enum이란?

Enum이란 JDK 1.5버전부터 도입된 자바의 열거형 클래스입니다.

여기서 중요한 점은 클래스라는 것인데요, 다른 클래스들처럼 enum 클래스에 생성자나 변수, 메서드를 선언할 수 있으며 인터페이스까지 상속할 수 있습니다.

다른 클래스들과는 한 가지 다른 중요한 점은, enum 클래스는 다른 클래스를 상속할 수 없고 확장될 수 없다는 것입니다.

class Card {
	static final int CLOVER = 0;
    static final int HEART = 1;
    static final int DIAMOND = 2;
    static final int SPADE = 3;
}

기본적으로 이렇게 정의된 Card 클래스를 열거형을 활용하면 아래처럼 변경할 수 있습니다.

enum Card {
	CLOVER,
    HEART,
    DIAMOND,
    SPADE
}

열거형은 선언된 순서부터 0부터 index값을 가집니다.

2. Enum이 제공하는 메서드

모든 열거형은 java.lang.Enum의 자손이며, 아래의 메서드를 상속받습니다.

Class<E> getDeclaringClass()

열거형의 Class객체를 반환한다.

String name()

열거형 상수의 이름을 문자열로 반환한다.

int ordinal()

열거형 상수가 정의된 순서(index)를 반환한다.


컴파일러가 자동적으로 추가해주는 메서드도 있습니다.

static E values()

열거형의 상수 전체를 배열 형태로 반환한다.

static E valueOf(String name)

name과 일치하는 열거형의 상수를 반환한다.

예제 코드입니다.

import java.util.Arrays;

enum Card{
    CLOVER("클로버"),
    HEART("하트"),
    DIAMOND("다이아몬드"),
    SPADE("스페이드");

    private String name;

    Card(String name){
        this.name = name;
    }
}

class EnumPractice {
    public static void main(String[] args) {
        Card card = Card.HEART;

        System.out.println(card.getDeclaringClass());
        System.out.println(card.name());
        System.out.println(card.ordinal());
        
        System.out.println(Arrays.toString(Card.values()));
        System.out.println(Card.valueOf(card.name()));
    }
}

Card라는 enum을 정의하고, 이를 main 메서드에서 사용했습니다.

위의 메서드들을 호출시킨 결과입니다.

getDeclaringClass 메서드 → class Card
name 메서드 → HEART (card 객체가 가지는 상수의 이름)
ordinal 메서드 → index (Heart는 두번째이므로 index는 1)
values 메서드 → Enum 열거형 상수를 배열 형태로 반환
valueOf 메서드 → 파라미터로 받은 이름을 가지는 열거형의 상수를 반환

추가로, enum의 생성자는 기본적으로 private이므로 생성자를 호출할 경우 에러를 발생시킵니다.

3. java.lang.Enum

Enum 클래스는 java.lang 패키지 내에 존재합니다. 자바 열거형의 모든 공통 클래스입니다.

Enum 클래스의 정의입니다.

public abstract class Enum<E extends Enum>
extends Object
implements Comparable, Serializable

Enum 클래스는 추상 클래스이며, 따라서 Enum 클래스를 객체로 생성할 수 없습니다.

Enum 클래스는 10개의 메서드를 제공하는데, 대부분이 Object 클래스의 메서드를 오버라이딩한 메서드입니다. (각 메서드의 자세한 내용은 2번 파트에서 다루었다고 생각하고 메서드 시그니쳐만 적고 넘어가겠습니다.)

  • final String name()
  • final int ordinal()
  • String toString()
  • final boolean equals(Oject obj)
  • final int hashCode()
  • final int compareTo(E obj)
  • static <T extends Enum> T valueOf(Class enumType, String name)
  • final Class <E> getDeclaringClass()
  • final Oject clone()
  • final void finalize()

4. EnumSet

EnumSet은 열거형 타입을 사용하기 위한

📄 참고

  1. enum in java - geeksforgeeks
  2. java-lang-enum-class-java - geeksforgeeks

0개의 댓글

관련 채용 정보