자바 - 스위치 표현식

안녕하세요, 미래의 자바 프로그래머 여러분! 오늘은 자바 12에서 도입되었고 자바 14에서 개선된 최신 기능 중 하나로, 스위치 표현식에 대해 다룰 것입니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 여러분이 코드를 한 줄도 쓰지 않았더라도 이 여정을 안내해 드릴 것입니다. 그래서, 안전벨트를 매고 함께 시작해 보겠습니다!

Java - Switch Expressions

스위치 표현식이란?

스위치 표현식에 들어가기 전에, 먼저 스위치 문이란 무엇인지에 대해 간단히 설명해 보겠습니다. 아이스크림 판매점에 가서, 선택한 맛에 따라 다른 토핑을 받는 것을 상상해 보세요. 이는 프로그래밍에서 스위치 문이 수행하는 역할과 매우 유사합니다 - 다양한 조건에 따라 다른 코드를 실행할 수 있게 해줍니다.

이제 스위치 표현식은 이 개념을 더욱 강력하고 간결하게 만들어 줍니다. 스위치 블록 전체를 값을 반환할 수 있는 표현식으로 취급할 수 있게 됩니다. 이는 정상적인 아이스크림 콘보다 더 럭셔리한 스ünde에 업그레이드하는 것과 같습니다!

예전 방법: 전통적인 스위치 문

처음에는 전통적인 스위치 문을 통해 어떻게 작업했는지 살펴보겠습니다:

String day = "MONDAY";
String typeOfDay;

switch (day) {
case "MONDAY":
case "TUESDAY":
case "WEDNESDAY":
case "THURSDAY":
case "FRIDAY":
typeOfDay = "Weekday";
break;
case "SATURDAY":
case "SUNDAY":
typeOfDay = "Weekend";
break;
default:
typeOfDay = "Invalid day";
}

System.out.println(typeOfDay);

이 예제에서는 하루가 주간인지 주말인지를 결정하고 있습니다. break 문을 사용하여 fall-through를 방지하고, typeOfDay를 스위치 블록 밖에 선언해야 하는 것을 노트하세요.

새로운 방법: 스위치 표현식

이제 같은 결과를 스위치 표현식을 사용하여 얻어보겠습니다:

String day = "MONDAY";
String typeOfDay = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "Weekday";
case "SATURDAY", "SUNDAY" -> "Weekend";
default -> "Invalid day";
};

System.out.println(typeOfDay);

와우! 얼마나 깔끔하고 간결한가요. 여러 case를 결합하고 break 문을 제거하고, 결과를 직접 typeOfDay에 할당했습니다. 방을 정리하는 것과 마찬가지로 갑자기 모든 것이 깔끔하고 청결해집니다!

"case L ->" 레이블을 사용한 스위치 표현식

화살표 문법(->)은 스위치 표현식의 주요 기능입니다. 이를 통해 case 레이블과 그에 연관된 액션을 간결하게 지정할 수 있습니다. 다른 예제를 살펴보겠습니다:

int dayNumber = 3;
String dayName = switch (dayNumber) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
case 4 -> "Thursday";
case 5 -> "Friday";
case 6 -> "Saturday";
case 7 -> "Sunday";
default -> "Invalid day number";
};

System.out.println("Day " + dayNumber + " is " + dayName);

이 예제에서는 일 수를 해당하는 이름으로 변환하고 있습니다. 화살표 문법은 각 case를 한 줄에 간결하게 표현할 수 있게 합니다. 바로 올바른 답을 가리키는 신호표와 같습니다!

"case L:" 문장과 yield 문을 사용한 스위치 표현식

때로는 스위치 표현식에서 간단한 값만을 반환하는 것보다 더 복잡한 작업을 해야 할 수도 있습니다. 이때 유용하게 사용할 수 있는 yield 문이 있습니다. "계산이 끝났고, 이것이 최종 답이다!"라고 말하는 것과 같습니다!

예제를 살펴보겠습니다:

int month = 8;
String season = switch (month) {
case 12, 1, 2:
yield "Winter";
case 3, 4, 5:
yield "Spring";
case 6, 7, 8:
yield "Summer";
case 9, 10, 11:
yield "Fall";
default: {
String message = "Invalid month: " + month;
System.out.println(message);
yield "Unknown";
}
};

System.out.println("The season for month " + month + " is " + season);

이 예제에서는 월에 따라 계절을 결정하고 있습니다. yield를 사용하여 값을 반환하는 것을 노트하세요, 특히 default case에서 좀 더 많은 처리를 할 때입니다.

고급 사용법: case 레이블에서 표현식 사용

스위치 표현식의 가장 멋진 기능 중 하나는 case 레이블에서 표현식을 사용할 수 있다는 것입니다. 이는 스위치 문에 슈퍼파워를 부여하는 것과 같습니다! 예제를 살펴보겠습니다:

record Person(String name, int age) {}

Person person = new Person("Alice", 25);

String lifeStage = switch (person) {
case Person p when p.age() < 13 -> "Child";
case Person p when p.age() >= 13 && p.age() < 20 -> "Teenager";
case Person p when p.age() >= 20 && p.age() < 60 -> "Adult";
case Person p when p.age() >= 60 -> "Senior";
default -> "Unknown";
};

System.out.println(person.name() + " is a " + lifeStage);

이 예제에서는 record (자바의 또 다른 멋진 기능)을 사용하여 사람을 나타내고, 복잡한 조건을 사용한 스위치 표현식으로 그들의 생애 주기를 결정하고 있습니다. 코드에 개인 생애 코칭师德가 있는 것과 같습니다!

결론

스위치 표현식은 자바에서 코드를 더 읽기 쉽고, 간결하고, 오류를 줄일 수 있는 강력한 도구입니다. 이는 플립 폰에서 스마트폰으로 업그레이드하는 것과 같습니다 - 갑자기 더 적은 노력으로 더 많은 것을 할 수 있게 됩니다!

기억해두세요, 프로그래밍은 모두 연습에 관련이 있습니다. 그래서 이러한 개념을 실험해 보세요. 여러분만의 스위치 표현식을 만들고, 다양한 시나리오에 대해 실험해 보며, 가장 중요한 것은 이를 즐기세요!

우리의 이야기가 끝날 때까지, 다음은 우리가 논의한 주요 방법들을 요약한 표입니다:

방법 설명
-> 간결한 case 레이블과 액션을 위한 화살표 문법
yield 스위치 표현식에서 값을 반환하는 문장
case L when condition case 레이블에서 패턴 매칭

코딩을 즐겁게, 여러분의 스위치가 항상 명확하게 표현되시길 바랍니다!

Credits: Image by storyset