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는 런타임에 변하지 않는 알려진 고정된 값의 집합이 있을 때 이상적이며, 일반적인 상수를 사용하는 것보다 코드를 더 안전하고 표현력 있게 만들어 줍니다.
챌린지
쉬움필드, 생성자 및 메서드를 갖춘 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()를 사용하세요
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조