Menu
Coddy logo textTech

Enum과 Enum 메서드

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 50번째.

enum(열거형)은 고정된 상수 집합을 나타내는 특별한 클래스 유형입니다. 요일이나 주문 상태와 같은 옵션을 표현하기 위해 임의의 정수나 문자열을 사용하는 대신, enum은 타입 안전하고 읽기 쉬운 값을 제공합니다.

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

Day today = Day.MONDAY;
System.out.println(today);  // 출력: MONDAY

열거형(Enums)은 단순한 상수 그 이상이며, 완전한 클래스입니다. 열거형에 필드, 생성자, 메서드를 추가할 수 있습니다:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // 출력: 20

모든 열거형(enum)은 유용한 내장 메서드와 함께 제공됩니다. values() 메서드는 모든 상수의 배열을 반환하며, valueOf()는 문자열을 일치하는 열거형 상수로 변환합니다. ordinal() 메서드는 상수의 위치(0부터 시작)를 반환합니다:

for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // 문자열을 enum으로 변환합니다

Enums는 런타임에 변하지 않는 알려진 고정된 값의 집합이 있을 때 이상적이며, 일반적인 상수를 사용하는 것보다 코드를 더 안전하고 표현력 있게 만들어 줍니다.

challenge icon

챌린지

쉬움

필드, 생성자 및 메서드를 갖춘 enum의 강력함을 보여주는 커피숍 주문 시스템을 구축해 보겠습니다. 가격 정보를 저장하는 CoffeeSize enum과 고객 주문을 처리하는 시스템을 만들 것입니다.

코드는 세 개의 파일로 구성됩니다:

  • CoffeeSize.java: 관련 가격이 포함된 커피 사이즈를 나타내는 enum을 생성합니다. enum에는 SMALL, MEDIUM, LARGE라는 세 가지 상수가 있어야 하며, 가격은 각각 2.50, 3.50, 4.50입니다.

    각 사이즈에는 private price 필드(double), 이를 설정하는 생성자, 그리고 이를 검색하는 getPrice() 메서드가 필요합니다. 또한 [size name] - $[price] 형식의 문자열을 반환하는 getDescription() 메서드를 추가하세요. (예: SMALL - $2.5)

  • Order.java: 커피 주문을 나타내는 클래스를 생성합니다. Order에는 customerName (String)과 size (CoffeeSize)라는 두 개의 private 필드가 있습니다. 두 필드를 초기화하는 생성자와 각 필드에 대한 getter 메서드를 포함하세요.

    다음과 같은 다중 행 문자열을 반환하는 getReceipt() 메서드를 추가하세요:

    Order for: [customerName]
    Size: [size description from getDescription()]
    Total: $[price from the size]
  • Main.java: 커피숍을 실제로 작동시켜 보세요! 고객 이름(String)과 사이즈 이름("SMALL", "MEDIUM", "LARGE"와 같은 String)의 두 가지 입력을 받게 됩니다.

    먼저, CoffeeSize.valueOf()를 사용하여 사이즈 문자열을 해당 enum 상수로 변환합니다. 고객 이름과 사이즈로 Order를 생성한 다음 영수증을 출력하세요.

    영수증을 출력한 후 빈 줄을 하나 출력하고, values() 메서드를 사용하여 모든 CoffeeSize 값을 반복하며 전체 메뉴를 표시합니다. 각 사이즈에 대해 해당 설명을 별도의 줄에 출력하세요.

고객 이름과 사이즈 이름("SMALL", "MEDIUM", "LARGE" 중 하나)의 두 가지 입력을 순서대로 받게 됩니다.

enum이 사이즈의 정체성과 관련 가격을 어떻게 캡슐화하는지 주목하세요. 코드 전체에서 별도의 상수나 매직 넘버를 사용하는 것보다 훨씬 깔끔합니다!

치트 시트

enum은 고정된 상수 집합을 나타내는 특별한 클래스 유형으로, 타입 안전하고 읽기 쉬운 값을 제공합니다:

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

Day today = Day.MONDAY;
System.out.println(today);  // 출력: MONDAY

Enum은 필드, 생성자 및 메서드를 가질 수 있습니다:

enum Size {
    SMALL(10), MEDIUM(20), LARGE(30);
    
    private int price;
    
    Size(int price) {
        this.price = price;
    }
    
    public int getPrice() {
        return price;
    }
}

System.out.println(Size.MEDIUM.getPrice());  // 출력: 20

내장 enum 메서드:

  • values() - 모든 enum 상수의 배열을 반환합니다
  • valueOf(String) - 문자열을 일치하는 enum 상수로 변환합니다
  • ordinal() - 상수의 위치를 반환합니다 (0부터 시작)
for (Day d : Day.values()) {
    System.out.println(d + " is at position " + d.ordinal());
}

Day day = Day.valueOf("FRIDAY");  // 문자열을 enum으로 변환

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 입력 읽기
        String customerName = scanner.nextLine();
        String sizeName = scanner.nextLine();
        
        // TODO: valueOf()를 사용하여 sizeName을 CoffeeSize 열거형으로 변환하세요
        
        // TODO: 고객 이름과 사이즈를 사용하여 Order를 생성하세요
        
        // TODO: 영수증을 출력하세요
        
        // TODO: 빈 줄을 출력하세요
        
        // TODO: 모든 CoffeeSize 값을 반복하여 전체 메뉴를 표시하세요
        // 힌트: 모든 열거형 상수를 가져오려면 CoffeeSize.values()를 사용하세요
        
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨