번역

자바 - 열거형: 초보자를 위한 가이드

안녕하세요, 자바 프로그래머를 꿈꾸는 여러분! 오늘은 자바의 열거형(type Enums)의 놀라운 세계에 몸을 던지기 위해 여기 모였습니다. 이전에 들어본 적이 없다고 해도 걱정 마세요 – 이 튜토리얼 끝나면 여러분은 열거형 전문가가 될 것입니다! 그럼, 좋아하는 음료수 한 잔을 들고 시작해보겠습니다!

Java - Enums

열거형 소개

코드에서 고정된 상수 집합을 표현해야 하는 상황에 처해본 적이 있나요? 아마도 커피 가게 프로그램을 만들 때 커피ocup의 다양한 크기를 표현해야 했을 수도 있고, 게임을 만들 때 캐릭터가 움직일 수 있는 다양한 방향을 표현해야 했을 수도 있습니다. 이때 열거형이 구조를 나타냅니다!

열거형(Enum)은 자바에서 "enumeration"의 약자로, 상수 집합(변경할 수 없는 변수, final 변수와 같은)을 나타내는 특수한 클래스입니다. 사전 정의된 값 집합을 만들고 변하지 않도록 하는 귀한 방법으로 생각해보세요.

클래스 선언

열거형을 선언하는 방법을 살펴보겠습니다. 문법은 매우 간단합니다:

enum CoffeeSize {
    SMALL,
    MEDIUM,
    LARGE
}

이 예제에서 CoffeeSize라는 열거형을 세 가지 상수(SMALL, MEDIUM, LARGE)로 만들었습니다. class 대신 enum 키워드를 사용하고, 각 상수는 쉼표로 구분되는 것을 주의하세요.

클래스 생성자

열거형은 정규 클래스처럼 생성자를 가질 수 있습니다. 이를 통해 각 열거형 상수에 추가 데이터를 연결할 수 있습니다. CoffeeSize 예제를 확장해보겠습니다:

enum CoffeeSize {
    SMALL(8),
    MEDIUM(12),
    LARGE(16);

    private final int ounces;

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

    public int getOunces() {
        return ounces;
    }
}

이 업데이트된 버전에서는 각 크기에 대한 온스 수를 나타내는 int 매개변수를 받는 생성자를 추가했습니다. 또한, ounces라는 개인 필드와 getOunces() getter 메서드를 추가했습니다.

클래스 메서드

열거형은 정규 클래스처럼 메서드를 가질 수 있습니다. CoffeeSize 열거형에 메서드를 추가해보겠습니다:

enum CoffeeSize {
    SMALL(8),
    MEDIUM(12),
    LARGE(16);

    private final int ounces;

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

    public int getOunces() {
        return ounces;
    }

    public String getDescription() {
        return this.name() + " coffee (" + this.ounces + " oz)";
    }
}

getDescription() 메서드를 추가하여 커피 크기를 설명하는 문자열을 반환합니다. name() 메서드는 Enum 클래스에서 상속받아서 문자열로 상수의 이름을 반환합니다.

상속된 메서드

모든 열거형은 java.lang.Enum을 묵시적으로 상속받습니다. 이는 내장된 몇 가지 메서드를 제공한다는 것을 의미합니다. 여기 일부 of the most commonly used methods are:

메서드 설명
name() 열거형 상수의 이름을 반환합니다
ordinal() 열거형 상수의 위치(0부터 시작)를 반환합니다
valueOf(String name) 지정된 이름의 열거형 상수를 반환합니다
values() 모든 열거형 상수를 포함하는 배열을 반환합니다

예제

이제 모든 것을 하나의 완벽한 예제로 모으겠습니다:

public class CoffeeShop {
    public static void main(String[] args) {
        CoffeeSize mySize = CoffeeSize.MEDIUM;

        System.out.println("I ordered a " + mySize.getDescription());
        System.out.println("This size has an ordinal value of: " + mySize.ordinal());

        System.out.println("\nAll available sizes:");
        for (CoffeeSize size : CoffeeSize.values()) {
            System.out.println(size.getDescription());
        }

        // valueOf 사용
        CoffeeSize anotherSize = CoffeeSize.valueOf("LARGE");
        System.out.println("\nUsing valueOf: " + anotherSize.getDescription());
    }
}

enum CoffeeSize {
    SMALL(8),
    MEDIUM(12),
    LARGE(16);

    private final int ounces;

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

    public int getOunces() {
        return ounces;
    }

    public String getDescription() {
        return this.name() + " coffee (" + this.ounces + " oz)";
    }
}

출력

이 프로그램을 실행하면 다음과 같은 출력이 나옵니다:

I ordered a MEDIUM coffee (12 oz)
This size has an ordinal value of: 1

All available sizes:
SMALL coffee (8 oz)
MEDIUM coffee (12 oz)
LARGE coffee (16 oz)

Using valueOf: LARGE coffee (16 oz)

이 예제에서 일어나는 일을 분석해보겠습니다:

  1. CoffeeSize 변수 mySize를 만들고 MEDIUM로 설정합니다.
  2. getDescription() 메서드를 사용하여 mySize의 설명을 인쇄합니다.
  3. MEDIUM의 오델러리 값(1)을 인쇄합니다. (오델러리 값은 0부터 시작하므로 기억하세요)
  4. for-each 루프를 사용하여 모든 CoffeeSize 값을 반복하고 설명을 인쇄합니다.
  5. 마지막으로 valueOf()를 사용하여 이름으로 LARGE 열거형 상수를 가져오는 방법을 보여줍니다.

그리고 그렇게 끝! 여러분은 자바 열거형의 세계에 첫 걸음을 내딛었습니다. 이들은 고정된 상수 집합을 타입 안전하게 표현하는 강력한 도구입니다.

열거형은 단순히 상수의 화려한 버전이 아닙니다. 생성자, 필드, 메서드를 가지므로 매우 다재다능합니다. 요일, 카드 슈트, 피자 크기와 같은 다른 고정된 값 집합을 표현하는 데 완벽합니다.

자바 여정을 계속하면서 열거형의 더 많은 사용법을 찾아볼 것입니다. 자바 언어의 기본 부분이며, 이를 마스터하면 더 효과적이고 효율적인 프로그래머가 될 것입니다.

코딩을 계속 연습하고, 코드를 작성하며, 가장 중요한 것은 학습의 과정을 즐기세요. 알 수 없이 복잡한 자바 프로그램을 쉽게 작성할 수 있을 것입니다. 코딩을 즐겁게!

Credits: Image by storyset