1.8.3: Case 레이블에 String 타입 사용하기
Java SE 7 버전부터 Switch 문에서 case 레이블에 String 타입을 사용할 수 있게 되었습니다. 이 기능은 문자열 기반의 조건부 로직을 더 깔끔하고 효율적으로 구현할 수 있게 해주었습니다. 이 섹션에서는 String 타입을 case 레이블로 사용하는 방법과 이를 활용한 예제들을 상세히 살펴보겠습니다.
String 타입 case 레이블 사용법
String 타입을 case 레이블로 사용할 때는 다음과 같은 규칙을 따릅니다:
Switch 문의 표현식은 String 타입이어야 합니다.
각 case 레이블은 문자열 리터럴이어야 합니다.
문자열 비교는 equals() 메서드를 사용하여 수행됩니다.
기본 예제
- 사용자로부터 영어로 된 색상을 입력받습니다.
- Switch 문을 사용하여 입력된 색상에 따라 한국어로 번역합니다.
- 각 색상에 대해 적절한 한국어 번역을 출력합니다.
import java.util.Scanner;
public class ColorTranslator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("영어로 된 색상을 입력하세요: ");
String colorEnglish = scanner.nextLine().trim().toLowerCase();
String colorKorean;
switch (colorEnglish) {
case "red":
colorKorean = "빨간색";
break;
case "blue":
colorKorean = "파란색";
break;
case "green":
colorKorean = "초록색";
break;
case "yellow":
colorKorean = "노란색";
break;
case "purple":
colorKorean = "보라색";
break;
case "orange":
colorKorean = "주황색";
break;
default:
colorKorean = "알 수 없는 색상";
}
System.out.println(colorEnglish + "은/는 한국어로 '" + colorKorean + "'입니다.");
}
}
이 예제에서:
Scanner
클래스의nextLine()
메서드를 사용하여 전체 라인을 읽고,trim()
메서드로 앞뒤 공백을 제거합니다.toLowerCase()
메서드를 사용하여 입력된 색상을 소문자로 변환하여 대소문자를 구분하지 않고 비교합니다.- Switch 문에서 각 case 레이블은 영어로 된 색상의 소문자 형태입니다.
- default 절은 알 수 없는 색상에 대한 처리를 합니다.
실용적인 예제: 계절 판별
import java.util.Scanner;
public class WeatherActivitySuggester {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("오늘의 날씨를 영어로 입력하세요 (예: sunny, rainy, cloudy): ");
String weather = scanner.nextLine().trim().toLowerCase();
String activity;
switch (weather) {
case "sunny":
activity = "해변가나 공원에서 산책하기";
break;
case "rainy":
activity = "영화관 가기 또는 집에서 책 읽기";
break;
case "cloudy":
activity = "산책하거나 카페에서 차 마시기";
break;
case "windy":
activity = "실내 운동이나 요리하기";
break;
case "snowy":
activity = "스키장 가기 또는 눈싸움하기";
break;
default:
activity = "날씨에 맞는 활동을 찾지 못했습니다.";
}
System.out.println("오늘의 날씨 '" + weather + "'에는 '" + activity + "'를 추천합니다.");
}
}
Scanner
클래스의nextLine()
메서드를 사용하여 전체 라인을 읽고,trim()
메서드로 앞뒤 공백을 제거합니다.toLowerCase()
메서드를 사용하여 입력된 날씨 상태를 소문자로 변환하여 대소문자를 구분하지 않고 비교합니다.- Switch 문에서 각 case 레이블은 영어로 된 날씨 상태의 소문자 형태입니다.
- default 절은 알 수 없는 날씨 상태에 대한 처리를 합니다.
주의사항 및 모범 사례
- 대소문자 구분: 문자열 비교 시 대소문자를 고려해야 합니다. 위의 예제에서는 toLowerCase()를 사용하여 이를 해결했습니다.
switch (month.toLowerCase()) {
// ...
}
- null 안전성: Switch 문의 표현식이 null일 경우 NullPointerException이 발생할 수 있습니다. 따라서 null 체크를 수행하는 것이 좋습니다.
if (month != null) {
switch (month.toLowerCase()) {
// ...
}
} else {
System.out.println("월 정보가 없습니다.");
}
- 정규화: 입력된 문자열을 정규화하여 공백이나 특수 문자를 제거하는 것이 좋습니다.
String normalizedMonth = month.trim().replaceAll("[^a-zA-Z]", "");
switch (normalizedMonth.toLowerCase()) {
// ...
}
- 국제화: 다국어 지원이 필요한 경우, 리소스 번들(Resource Bundle)을 사용하여 지역화된 문자열을 관리하는 것이 좋습니다.
- 성능 고려: 많은 case가 있는 Switch 문은 컴파일러에 의해 최적화될 수 있습니다. 하지만 매우 큰 수의 case가 있을 경우, HashMap과 같은 자료구조를 사용하는 것이 더 효율적일 수 있습니다.
String 타입을 case 레이블로 사용하면 문자열 기반의 조건부 로직을 더 깔끔하고 읽기 쉽게 만들 수 있습니다. 대소문자와 null 값 등에 주의를 기울이고, 필요에 따라 입력값을 정규화하는 것이 중요합니다.
1.8.4: Null Selector Variables
1.8.4: Null 선택자 변수
Null 선택자 변수는 Switch 문에서 특별히 주의해야 하는 사항입니다. 이 섹션에서는 Null 선택자 변수의 문제점과 이를 처리하는 방법에 대해 설명합니다.
Null 선택자 변수의 문제점
- NullPointerException: Switch 문의 선택자 변수가 Null인 경우, 실행 시 NullPointerException이 발생합니다.
- 예상치 못한 동작: Null 값은 어떤 case에도 매칭되지 않아 예상치 못한 결과를 초래할 수 있습니다.
Null 처리 방법
- Null 체크:
String month = getMonth(); // Null일 가능성이 있는 메서드
if (month != null) {
switch (month.toLowerCase()) {
case "january":
System.out.println("1월");
break;
// ...
}
} else {
System.out.println("월 정보가 없습니다.");
}
- Optional 클래스 사용 (Java 8 이상):
Optional<String> optionalMonth = Optional.ofNullable(getMonth());
optionalMonth.ifPresentOrElse(
m -> {
switch (m.toLowerCase()) {
case "january":
System.out.println("1월");
break;
// ...
}
},
() -> System.out.println("월 정보가 없습니다.")
);
- 디폴트 케이스 활용:
String month = getMonth();
switch (month != null ? month.toLowerCase() : "") {
case "":
System.out.println("월 정보가 없습니다.");
break;
case "january":
System.out.println("1월");
break;
// ...
}
팁
- 항상 Null 체크를 수행하거나 Optional을 사용하여 Null 안전성을 보장하세요.
- 디폴트 케이스를 활용하여 Null 값에 대한 처리를 명시적으로 구현하세요.
- 메서드 문서화에서 Null 가능성을 명시하고, 호출자가 이를 인지할 수 있도록 하세요.
편히 모아진 글 보시려면 아래 위키독스 링크 >>
https://wikidocs.net/book/17111
'JAVA' 카테고리의 다른 글
JAVA: switch문의 완성성 보장, 케이스 블록 사용한 switch [코딩백과 with JAVA] (1) | 2024.12.22 |
---|---|
JAVA: switch 표현식의 값 생성[코딩백과 with JAVA] (1) | 2024.12.22 |
JAVA: Switch문과 If-then-else 선택 [코딩백과 with JAVA] (0) | 2024.12.22 |
JAVA Switch문 [코딩백과 with JAVA] (0) | 2024.12.22 |
JAVA 제어문 - for 문 [코딩백과 with JAVA] (0) | 2024.12.22 |