코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java Enums

자바 열거형 (Java Enums): 개념 및 사용법

  • *열거형(Enum)**은 자바에서 상수들의 집합을 정의하는 특수한 데이터 타입입니다. 열거형을 사용하면 몇 가지의 상수 값을 그룹화하여 더 가독성이 좋고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 자바에서 열거형은 하나의 클래스로 취급되며, 각 상수는 해당 열거형 클래스의 객체로 간주됩니다.

이 글에서는 자바 열거형의 개념, 선언 및 사용법, 메서드와 기능에 대해 설명하고 예제를 통해 자세히 알아봅니다.

1. 열거형(Enum) 개념

  • *열거형(Enum)**은 특정한 값들의 집합을 정의할 때 사용합니다. 각 상수 값은 열거형의 고유한 인스턴스입니다. 열거형을 사용하면 프로그램에서 특정 값이 몇 가지의 제한된 값 중 하나라는 것을 명확히 할 수 있습니다.

자바 열거형의 특징

  1. 상수 값: 열거형은 상수 값들의 집합을 정의합니다. 모든 열거형 상수는 고정된 값입니다.
  2. 타입 안전성: 열거형을 사용하면 상수 값에 대해 컴파일 타임에 타입 검사를 할 수 있어 잘못된 값이 사용되는 것을 방지합니다.
  3. 메서드와 필드: 열거형은 메서드와 필드를 가질 수 있으며, 객체 지향적인 방식으로 사용할 수 있습니다.
  4. 내부적으로는 클래스: 열거형은 내부적으로 클래스이며, enum으로 선언된 상수 값은 각각 그 클래스의 객체입니다.

2. 열거형 선언

자바에서 열거형은 enum 키워드를 사용하여 선언합니다. 열거형 내에서 선언된 상수들은 모두 대문자로 작성하는 것이 관례입니다.

기본적인 열거형 선언

// 열거형 선언
enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

열거형 사용 예제

public class Main {
    public static void main(String[] args) {
        Day today = Day.MONDAY;

        // 열거형 값 출력
        System.out.println("Today is: " + today); // 출력: Today is: MONDAY

        // 열거형 값 비교
        if (today == Day.MONDAY) {
            System.out.println("Start of the work week!");
        }
    }
}

결과:

Today is: MONDAY
Start of the work week!

위 예제에서 Day라는 열거형을 선언하고, today라는 변수를 열거형 타입으로 선언하여 Day.MONDAY 값을 할당했습니다. if 문을 통해 열거형 상수 값을 비교할 수도 있습니다.

3. 열거형 메서드

열거형은 몇 가지 기본적인 메서드를 제공합니다. 또한 열거형은 일반 클래스처럼 사용자 정의 메서드와 필드를 가질 수 있습니다.

기본 메서드

  1. values(): 열거형의 모든 상수를 배열로 반환합니다.
  2. valueOf(String name): 이름으로 열거형 상수를 반환합니다.
  3. ordinal(): 열거형 상수의 순서를 반환합니다. 0부터 시작합니다.
  4. name(): 열거형 상수의 이름을 반환합니다.

기본 메서드 예제

enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

public class Main {
    public static void main(String[] args) {
        // values() 메서드 사용
        for (Day day : Day.values()) {
            System.out.println(day + " ordinal: " + day.ordinal());
        }

        // valueOf() 메서드 사용
        Day dayFromString = Day.valueOf("FRIDAY");
        System.out.println("Day from string: " + dayFromString);
    }
}

결과:

SUNDAY ordinal: 0
MONDAY ordinal: 1
TUESDAY ordinal: 2
WEDNESDAY ordinal: 3
THURSDAY ordinal: 4
FRIDAY ordinal: 5
SATURDAY ordinal: 6
Day from string: FRIDAY

위 예제에서 values() 메서드를 사용해 Day 열거형의 모든 상수를 출력하고, ordinal() 메서드를 사용해 각 상수의 순서를 출력했습니다. 또한 valueOf() 메서드를 사용하여 문자열을 통해 열거형 상수를 얻을 수 있습니다.

4. 사용자 정의 필드와 메서드

열거형은 필드와 메서드를 가질 수 있습니다. 이를 통해 각 열거형 상수마다 서로 다른 값을 할당하거나 동작을 구현할 수 있습니다.

사용자 정의 필드와 메서드 예제

// 열거형에 필드와 생성자, 메서드 추가
enum Fruit {
    APPLE("Red"), BANANA("Yellow"), GRAPE("Purple");

    private String color;  // 필드

    // 생성자
    Fruit(String color) {
        this.color = color;
    }

    // 메서드
    public String getColor() {
        return color;
    }
}

public class Main {
    public static void main(String[] args) {
        // 열거형 상수에 정의된 메서드 호출
        for (Fruit fruit : Fruit.values()) {
            System.out.println(fruit + " is " + fruit.getColor());
        }
    }
}

결과:

APPLE is Red
BANANA is Yellow
GRAPE is Purple

위 예제에서 Fruit 열거형에 color라는 필드를 추가하고, 생성자를 통해 각 열거형 상수마다 다른 색상을 할당했습니다. getColor() 메서드를 통해 각 상수의 색상을 반환합니다.

5. 열거형과 switch

자바에서는 switch문에서 열거형을 사용할 수 있습니다. 이를 통해 열거형 값을 기반으로 분기 처리를 할 수 있습니다.

switch문과 열거형 예제

enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

public class Main {
    public static void main(String[] args) {
        Day today = Day.FRIDAY;

        // 열거형과 switch문 사용
        switch (today) {
            case MONDAY:
                System.out.println("Start of the work week.");
                break;
            case FRIDAY:
                System.out.println("End of the work week.");
                break;
            case SATURDAY:
            case SUNDAY:
                System.out.println("Weekend!");
                break;
            default:
                System.out.println("Midweek day.");
                break;
        }
    }
}

결과:

End of the work week.

위 예제에서 switch문을 사용하여 열거형 Day의 값을 기반으로 특정 동작을 수행할 수 있습니다.

6. 열거형과 생성자

열거형에는 생성자를 사용할 수 있으며, 각 열거형 상수는 해당 생성자를 호출하여 초기화됩니다. 생성자는 private으로 선언되어야 하며, 열거형 외부에서 열거형 상수를 추가로 생성할 수 없습니다.

열거형 생성자 예제

enum Season {
    WINTER("Cold"), SPRING("Warm"), SUMMER("Hot"), FALL("Cool");

    private String description;

    // 생성자
    private Season(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

public class Main {
    public static void main(String[] args) {
        for (Season season : Season.values()) {
            System.out.println(season + ": " + season.getDescription());
        }
    }
}

결과:

WINTER: Cold
SPRING: Warm
SUMMER: Hot
FALL: Cool

위 예제에서 Season 열거형은 description 필드를 가지며, 생성자를 통해 각 상수에 고유한 설명을 추가하였습니다.

7. 열거형을 사용하는 이유

1. 코드 가독성

열거형을 사용하면 코드를 더 명확하고 가독성 높게 작성할 수 있습니다. 상수 값을 그룹화하여 의미 있는 이름으로 정의할 수 있습니다.

2. 타입 안전성

열거형은 컴파일 시 타입 검사를 수행하므로, 잘못된 값을 전달할 위험이 줄어듭니다. 상수 대신 열거형을 사용하면 코드를 더 안전하게 작성할 수 있습니다.

3. 유지보수성

열거형을 사용하면 상수 값을 중앙에서 관리할 수 있어 유지보수가 용이해집니다. 상수 값을 변경하거나 추가할 때 열거형을 수정하면 모든 코드에서 일관성을 유지할 수 있습니다.

요약

  • *열거형(Enum)**은 상수들의 집합을 정의하는 특수한 데이터

타입으로, 상수 값들을 그룹화하여 코드의 가독성을 높이고 유지보수를 쉽게 할 수 있습니다.

  • 열거형은 상수 값 외에도 필드, 메서드, 생성자를 가질 수 있습니다.
  • 기본 메서드(values(), valueOf(), ordinal() 등)를 사용해 열거형 상수들을 다룰 수 있으며, switch과 함께 사용할 수 있습니다.
  • 열거형은 타입 안전성코드의 유연성을 제공하여 코드의 품질을 향상시키는 중요한 도구입니다.

열거형을 적절하게 사용하면 프로그램의 구조를 더 명확하게 만들 수 있으며, 상수를 다루는 코드의 오류를 줄일 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com