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

직접 해보기

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실력 점검

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

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