Enum과 Enum 메서드
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 50번째.
enum(열거형)은 고정된 constants 집합을 나타내는 특별한 클래스 유형입니다. 요일이나 주문 상태와 같은 옵션을 나타내기 위해 임의의 정수나 문자열을 사용하는 대신, enum은 형식 안전하고 읽기 쉬운 값을 제공합니다.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // 출력: MONDAY열거형은 단순한 constants 그 이상입니다. 열거형은 완전한 클래스입니다. 열거형에 fields, 생성자, methods를 추가할 수 있습니다:
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모든 열거형에는 유용한 기본 제공 메서드가 있습니다. values() 메서드는 모든 상수의 배열을 반환하고, valueOf()는 문자열을 일치하는 열거형 상수로 변환합니다. ordinal() 메서드는 상수의 위치(0부터 시작)를 반환합니다:
for (Day d : Day.values()) {
System.out.println(d + " is at position " + d.ordinal());
}
Day day = Day.valueOf("FRIDAY"); // 문자열을 enum으로 변환열거형은 런타임에 변경되지 않는, 알고 있는 고정된 값 집합이 있을 때 이상적이며, 일반 상수를 사용하는 것보다 코드를 더 안전하고 표현력 있게 만들어 줍니다.
챌린지
쉬움fields, constructors, methods를 사용하여 enum의 강력한 기능을 보여 주는 커피숍 주문 시스템을 만들어 보겠습니다. 가격 정보를 저장하는 CoffeeSize enum과 고객 주문을 처리하는 시스템을 만듭니다.
코드를 세 개의 파일로 구성합니다.
CoffeeSize.java: 관련 가격을 나타내는 enum을 만듭니다. enum에는 세 개의 상수인SMALL,MEDIUM,LARGE가 있어야 하며, 각각의 가격은2.50,3.50,4.50입니다.각 사이즈에는 private
pricefield (double), 이를 설정하는 constructor, 그리고 값을 가져오는getPrice()method가 필요합니다. 또한 다음 형식의 문자열을 반환하는getDescription()method를 추가합니다:[size name] - $[price](예:SMALL - $2.5)Order.java: 커피 주문을 나타내는 class를 만듭니다. Order에는 두 개의 private field가 있습니다:customerName(String)과size(CoffeeSize)입니다. 두 field를 초기화하는 constructor와 각각에 대한 getter methods를 포함합니다.다음과 같은 여러 줄 문자열을 반환하는
getReceipt()method를 추가합니다.Order for: [customerName] Size: [size description from getDescription()] Total: $[price from the size]Main.java: 커피숍을 실제로 작동하게 만듭니다! 두 개의 입력을 받습니다. 고객 이름(String)과 사이즈 이름(String, 예: "SMALL", "MEDIUM", 또는 "LARGE")입니다.먼저
CoffeeSize.valueOf()를 사용하여 사이즈 문자열을 해당 enum 상수로 변환합니다. 고객 이름과 사이즈로 Order를 생성한 다음 영수증을 출력합니다.영수증을 출력한 후 빈 줄을 출력하고,
values()method를 사용하여 모든CoffeeSize값을 iterating하며 전체 메뉴를 표시합니다. 각 사이즈의 설명을 별도의 줄에 출력합니다.
입력은 다음 순서로 두 개가 주어집니다: 고객 이름과 사이즈 이름 ("SMALL", "MEDIUM", 또는 "LARGE" 중 하나)입니다.
enum이 사이즈의 정체성과 관련 가격을 모두 캡슐화한다는 점에 주목하세요. 코드 전체에서 별도의 constants나 magic numbers를 사용하는 것보다 훨씬 깔끔합니다!
직접 해보기
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 값을 순회하여 전체 메뉴 표시
// Hint: 모든 열거형 상수를 가져오려면 CoffeeSize.values()를 사용
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조직접 연습해 보세요: 온라인 Java 컴파일러