enum 정리

CosmoNumb·2024년 7월 19일
0

java

목록 보기
4/24

Java의 enum은 열거형 타입을 정의하는 데 사용되며, 상수들을 더 안전하고 구조적으로 관리할 수 있게 해줍니다. enum은 단순히 상수들의 집합일 뿐만 아니라, 클래스처럼 동작하여 메서드, 필드, 인터페이스 구현 등을 포함할 수 있습니다.

핵심 개념

  1. 기본 사용법:
    enum은 상수들을 정의하는 데 사용됩니다. 각 상수는 암묵적으로 public static final입니다.

    public enum Grade {
        BASIC,
        GOLD,
        DIAMOND
    }
  2. 메서드와 필드 추가:
    enum 타입은 메서드와 필드를 가질 수 있습니다. 이를 통해 더 복잡한 동작을 정의할 수 있습니다.

    public enum Grade {
        BASIC(1),
        GOLD(2),
        DIAMOND(3);
    
        private final int level;
    
        Grade(int level) {
            this.level = level;
        }
    
        public int getLevel() {
            return level;
        }
    }
  3. 생성자:
    enum의 생성자는 private이어야 합니다. 이는 enum 상수들이 고정된 집합임을 보장합니다.

  4. 인터페이스 구현:
    enum은 인터페이스를 구현할 수 있습니다. 이를 통해 다형성을 제공할 수 있습니다.

    public interface Describable {
        String getDescription();
    }
    
    public enum Grade implements Describable {
        BASIC {
            public String getDescription() {
                return "Basic level";
            }
        },
        GOLD {
            public String getDescription() {
                return "Gold level";
            }
        },
        DIAMOND {
            public String getDescription() {
                return "Diamond level";
            }
        }
    }
  5. 상속:
    enum은 다른 클래스나 enum을 상속할 수 없습니다. 모든 enumjava.lang.Enum 클래스를 직접 상속합니다.

자주 쓰이는 기본 메서드

Java enum 타입에는 몇 가지 기본적으로 제공되는 메서드가 있습니다. 이들 메서드는 java.lang.Enum 클래스에서 상속받은 메서드들입니다.

  1. values():
    모든 열거형 상수들을 배열로 반환합니다.

    for (Grade grade : Grade.values()) {
        System.out.println(grade);
    }
  2. valueOf(String name):
    주어진 이름과 일치하는 열거형 상수를 반환합니다. 이름이 일치하지 않으면 IllegalArgumentException이 발생합니다.

    Grade grade = Grade.valueOf("GOLD");
  3. name():
    열거형 상수의 이름을 문자열로 반환합니다.

    String name = Grade.GOLD.name();
  4. ordinal():
    열거형 상수가 정의된 순서를 반환합니다(0부터 시작).

    int ordinal = Grade.GOLD.ordinal();

예제 코드

다음은 위의 개념들을 포함한 예제 코드입니다.

public interface Describable {
    String getDescription();
}

public enum Grade implements Describable {
    BASIC(1) {
        public String getDescription() {
            return "Basic level";
        }
    },
    GOLD(2) {
        public String getDescription() {
            return "Gold level";
        }
    },
    DIAMOND(3) {
        public String getDescription() {
            return "Diamond level";
        }
    };

    private final int level;

    Grade(int level) {
        this.level = level;
    }

    public int getLevel() {
        return level;
    }

    public static void main(String[] args) {
        for (Grade grade : Grade.values()) {
            System.out.println("Grade: " + grade.name() + ", Level: " + grade.getLevel() + ", Description: " + grade.getDescription());
        }

        Grade gold = Grade.valueOf("GOLD");
        System.out.println("Gold ordinal: " + gold.ordinal());
    }
}

요약

  • enum은 상수들의 집합을 정의하며 클래스처럼 동작할 수 있습니다.
  • enum은 생성자, 메서드, 필드를 가질 수 있습니다.
  • enum은 인터페이스를 구현할 수 있지만 상속은 불가능합니다.
  • enumvalues(), valueOf(), name(), ordinal() 등의 기본 메서드를 제공합니다.

이러한 기능들을 통해 enum을 유연하게 사용하여 코드의 가독성과 유지보수성을 높일 수 있습니다.

0개의 댓글