Java - Enum(특장점,활용,사용법,예시)

손지민·2023년 11월 6일

Java 기초

목록 보기
9/13
post-thumbnail

1. 들어가며

우아한 테크코스 3주차에 로또미션에서 Java Enum을 공부하여 적용하라는 요구사항이 추가되어 공부하게 되었습니다. Java Enum(열거형)은 상수의 집합을 나타내는 특별한 데이터 유형입니다. 열거형을 사용하면 변수가 특정한 미리 정의된 상수 중 하나일 때 이를 명시적으로 선언할 수 있습니다.

1.1. 간단 설명

  • Java Enum(열거형)은 상수의 집합을 나타내는 특별한 데이터 유형입니다. 열거형을 사용하면 변수가 특정한 미리 정의된 상수 중 하나일 때 이를 명시적으로 선언할 수 있습니다.
  • 일반적으로 열거형은 서로 관련된 상수들의 집합을 정의하며, 예를 들어 요일(월요일, 화요일 등), 계절(봄, 여름, 가을, 겨울) 등을 표현하는 데 사용됩니다.
  • Java에서 Enum은 enum 키워드를 사용하여 정의합니다. Enum을 정의하면 자동으로 java.lang.Enum 클래스를 확장하게 됩니다.

2. 특징, 장점

2.1. Enum의 기본적인 특징, 장점

  • 문자열과 비교해, IDE의 적극적인 지원을 받을 수 있습니다.
    • 자동완성, 오타검증, 텍스트 리팩토링 등등
  • 허용 가능한 값들을 제한할 수 있습니다.
  • 리팩토링시 변경 범위가 최소화 됩니다.
    • 내용의 추가가 필요하더라도, Enum 코드 외에 수정할 필요가 없습니다.
  • enum은 상수를 나타내는 데에만 사용되지 않고, 더 복잡한 로직이나 데이터를 갖는 객체로 확장될 수 있습니다. 이를 통해 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

2.2. Java Enum의 장점

  • Java의 Enum은 이보다 더 많은 장점을 갖고 있습니다.
    C/C++의 경우 Enum이 결국 int값이지만, Java의 Enum은 완전한 기능을 갖춘 클래스이기 때문입니다.

    이펙티브 자바의 Enum 파트에서 더 다양하고 깊은 사례를 볼 수 있습니다.


2.2.1 우아한 기술블로그

  1. 데이터들간의 연관 관계 표현
  2. 상태와 행위를 한 곳에서 정리
  3. 데이터 그룹 관리

2.2.2. ChatGpt

  1. 제한된 상수집합
    • Enum은 특정 유형의 상수 값을 정의하며, 그 유형에 속하는 값들 중 하나만을 가질 수 있습니다.
  2. 가독성 및 안전성
    • 코드를 읽기 쉽게 만들어줍니다. 예를 들어, Day.MONDAY, Day.TUESDAY와 같이 의미를 명확히 드러내어 주며, 오타로 인한 실수를 방지합니다.
  3. 강력한 타입 검사
    • Enum 타입은 컴파일 시점에 안전성을 제공하며, 열거형 외의 다른 값은 허용되지 않습니다.
  4. 클래스와 비슷한 기능
    • Enum은 클래스와 유사하게 동작합니다. 각 열거형 상수는 해당 Enum 유형의 인스턴스로 취급됩니다.

2.3. 활용

  1. switch 문에서 사용
  2. Enum 메서드 활용
    • Enum은 메서드나 데이터를 포함할 수 있어 각각의 Enum 상수에 대해 동작을 수행할 수 있습니다.
  3. Enum 상수 추가
    • Enum에 새로운 상수를 추가할 수 있으며, 해당 Enum의 모든 상수들을 반복하여 사용할 수 있습니다.

3. 사용법

3.1. values()

  • Enum 상수를 배열로 반환합니다. 이 메서드를 사용하면 Enum에 정의된 모든 상수를 반복하거나 처리할 수 있습니다.

3.2. valueOf(String name)

  • 지정된 이름과 일치하는 Enum 상수를 반환합니다. 주어진 이름과 일치하는 Enum 상수를 찾아 반환하며, 대소문자를 구분합니다.

3.3. name()

  • Enum 상수의 이름을 문자열로 반환합니다.

3.4. ordinal()

  • Enum 상수의 순서를 정수 값으로 반환합니다. 첫 번째 Enum 상수는 0부터 시작하여 순서대로 1씩 증가합니다.

3.5. compareTo()

  • compareTo() 메서드는 Java Enum 클래스가 아닌, Java의 인터페이스인 Comparable 인터페이스에 속한 메서드입니다. Enum 상수들 간의 상대적인 순서를 비교하기 위해 사용됩니다.

3.6. 예시

enum Color {
    RED, GREEN, BLUE
}

public class EnumMethodsExample {
    public static void main(String[] args) {
        // values(): Enum 상수를 배열로 반환
        Color[] colors = Color.values();

        // 값들을 반복하여 출력
        for (Color color : colors) {
            System.out.println("Enum 상수: " + color + ", 순서: " + color.ordinal() + ", 이름: " + color.name());
        }

        // valueOf(String name): 지정된 이름과 일치하는 Enum 상수 반환
        String colorName = "RED";
        Color redColor = Color.valueOf(colorName); // 대소문자 구분

        System.out.println("값이 " + colorName + "인 Enum: " + redColor);

        // compareTo(): Enum 상수들 간의 비교
        Color firstColor = Color.RED;
        Color secondColor = Color.BLUE;

        int comparison = firstColor.compareTo(secondColor);

        if (comparison < 0) {
            System.out.println(firstColor + " comes before " + secondColor);
        } else if (comparison > 0) {
            System.out.println(firstColor + " comes after " + secondColor);
        } else {
            System.out.println(firstColor + " and " + secondColor + " are the same");
        }
    }
}

참고

profile
Developer

0개의 댓글