자바 - 열거형 문자열

안녕하세요, 자바 프로그래머를 꿈꾸고 계신 분들! 오늘은 자바에서 열거형 문자열에 대해 탐험해보겠습니다. 프로그래밍에 완전新手라도 걱정 마세요 – 저는 여러분을 단계별로 이끌어주겠습니다. 마치 저의 수많은 학생들을 위해 수년간 가르쳐온 것처럼요. 그럼, 함께 이 흥미로운 여정에 떠나보죠!

Java - Enum Strings

열거형은 무엇인가요?

열거형 문자열에 들어가기 전에 기본적인 것부터 살펴보겠습니다. 열거형은, "enumerations"의 약자로, 자바에서 고정된 일관의 상수를 나타내는 특수한 형입니다. 프로그램의 진행 중에 변하지 않는 사전 정의된 옵션 목록으로 생각해보세요.

커피숍 프로그램을 만들고 있다고 상상해보세요. 컵 크기에는 작은(SMALL), 중간(MEDIUM), 큰(LARGE)가 있을 수 있습니다. 이는 열거형을 사용하는 완벽한 시나리오입니다!

이 열거형은 다음과 같이 정의할 수 있습니다:

public enum CupSize {
SMALL,
MEDIUM,
LARGE
}

이제 이 열거형을 코드에서 어떻게 사용할 수 있는지 봅시다:

public class CoffeeShop {
public static void main(String[] args) {
CupSize myOrder = CupSize.MEDIUM;
System.out.println("저는 " + myOrder + " 커피를 주세요!");
}
}

이 코드를 실행하면 다음과 같은 출력이 나옵니다: "저는 MEDIUM 커피를 주세요!"

열거형 문자열: 더 자세히 살펴보기

이제 열거형이 무엇인지 이해했으므로, 열거형 문자열에 대해 탐험해보겠습니다. 기본적으로, 자바에서 열거형 값을 인쇄할 때는 그 이름을 문자열로 사용합니다. 그러나 열거형 값의 문자열 표현을 커스터마이즈하고 싶은 경우는 어떻게 해야 하나요?

이때 toString() 메서드가 매우 유용합니다. CupSize 열거형을 강화하여 더 설명적인 문자열을 제공하겠습니다:

public enum CupSize {
SMALL("작은 (8 oz)"),
MEDIUM("중간 (12 oz)"),
LARGE("큰 (16 oz)");

private final String description;

CupSize(String description) {
this.description = description;
}

@Override
public String toString() {
return this.description;
}
}

이제 무엇이 일어나고 있는지 분석해보겠습니다:

  1. 열거형에 description 필드를 추가했습니다.
  2. 이 설명을 매개변수로 받는 생성자를 만들었습니다.
  3. toString() 메서드를 오버라이드하여 커스텀 설명을 반환합니다.

이제 강화된 열거형을 사용해보겠습니다:

public class CoffeeShop {
public static void main(String[] args) {
CupSize myOrder = CupSize.MEDIUM;
System.out.println("저는 " + myOrder + " 커피를 주세요!");
}
}

이번에는 코드를 실행하면 다음과 같은 출력이 나옵니다: "저는 중간 (12 oz) 커피를 주세요!"

멋지지 않나요? 열거형 값의 문자열 표현을 커스터마이즈할 수 있습니다!

열거형 문자열로 작업하기

이제 열거형에 대한 커스텀 문자열 표현을 만드는 방법을 알았으므로, 열거형 문자열로 공통적으로 수행할 수 있는 작업에 대해 탐험해보겠습니다.

열거형을 문자열로 변환하기

이미 toString() 메서드를 사용하여 열거형을 문자열로 변환하는 방법을 봤습니다. 하지만 열거형 상수의 이름을 문자열로 얻는 다른 방법도 있습니다:

CupSize size = CupSize.LARGE;
String sizeName = size.name();
System.out.println("열거형 이름은: " + sizeName);

이는 다음과 같은 출력을 내뿜습니다: "열거형 이름은: LARGE"

문자열을 열거형으로 변환하기

문자열이 있고 그 문자열을 다시 열거형으로 변환하고 싶은 경우는 어떻게 해야 하나요? valueOf() 메서드를 사용할 수 있습니다:

String sizeString = "SMALL";
CupSize size = CupSize.valueOf(sizeString);
System.out.println("변환된 열거형은: " + size);

이는 다음과 같은 출력을 내뿜습니다: "변환된 열거형은: 작은 (8 oz)"

열거형 값에 대해 반복하기

어쩌다가 열거형의 모든 값을 반복하고 싶을 수도 있습니다. values() 메서드를 사용하여 이를 할 수 있습니다:

System.out.println("사용 가능한 컵 크기:");
for (CupSize size : CupSize.values()) {
System.out.println("- " + size);
}

이는 다음과 같은 출력을 내뿜습니다:

사용 가능한 컵 크기:
- 작은 (8 oz)
- 중간 (12 oz)
- 큰 (16 oz)

실제 예제: 커피 주문 시스템

이제 배운 모든 것을 하나로 엮어 실제 예제를 만들어보겠습니다. 간단한 커피 주문 시스템을 만듭니다:

import java.util.Scanner;

public enum CoffeeType {
ESPRESSO("강한 커피로, 뜨겁은 물을 압력을 통해 잘게 갈아넣은 커피豆으로 더듬어brew된 커피."),
LATTE("에스프레소에 스팀牛奶과 약간의牛奶 퍼沫을 올린 커피."),
CAPPUCCINO("에스프레소, 스팀牛奶,牛奶 퍼沫의 비율이 동일한 커피.");

private final String description;

CoffeeType(String description) {
this.description = description;
}

@Override
public String toString() {
return name() + ": " + this.description;
}
}

public class CoffeeShop {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("우리 커피숍에 오신 것을 환영합니다!");
System.out.println("다음은 우리가 제공하는 커피 타입입니다:");
for (CoffeeType type : CoffeeType.values()) {
System.out.println("- " + type);
}

System.out.print("어떤 타입의 커피를 원하시나요? ");
String userChoice = scanner.nextLine().toUpperCase();

try {
CoffeeType chosenCoffee = CoffeeType.valueOf(userChoice);
System.out.println("멋진 선택입니다! " + chosenCoffee.name().toLowerCase() + " 커피를 주문하셨습니다.");
} catch (IllegalArgumentException e) {
System.out.println("죄송합니다, 그 타입의 커피는 없습니다.");
}

scanner.close();
}
}

이 프로그램은 다음을 수행합니다:

  1. CoffeeType 열거형을 정의하고 각 커피 타입에 대한 설명을 제공합니다.
  2. main 메서드에서 사용자에게 모든 사용 가능한 커피 타입을 표시합니다.
  3. 사용자에게 커피 타입을 선택하도록 요청합니다.
  4. 사용자의 입력을 CoffeeType 열거형으로 변환하려고 시도합니다.
  5. 성공하면 주문을 확인합니다. 그렇지 않으면 그 타입의 커피가 없음을 알려줍니다.

결론

축하합니다! 자바에서 열거형 문자열의 세계에 깊이 들어간 것을 확인했습니다. 열거형이 무엇인지, 문자열 표현을 어떻게 커스터마이즈하는지, 그리고 다양한 방법으로 어떻게 작업하는지 다루었습니다. 열거형은 자바에서 고정된 일관의 상수를 다룰 때 코드를 더 가독성 있고 오류를 줄이는 강력한 도구라는 것을 기억하십시오.

자바 여정을 계속하면서 열거형의 사용 사례를 더 많이 찾아보십시오. 그들은 특히 스위치 문에서, 상태 기계에서 상태를 나타내는 데, 또는 고정된 옵션 집합을 다룰 때 매우 유용합니다.

좋은 연습하고, 호기심을 유지하며, 즐거운 코딩 되세요!

Credits: Image by storyset