왕초보의 개발 공부/자바 공부하기

자바 switch 표현식 yield 쓰는 이유

봉구C 2025. 3. 28. 09:00
728x90
반응형
SMALL

코드를 공부 하다보면 하나씩 외워야 하는 기본 문법 때문에 애를 먹습니다. 
코드는 외우는게 아니라고 하는 사람들이 있지만 그건 기본적인 코드를 알고 있을 때의 통하는 말인 것 같습니다.
간단한 프로그램은 뚝딱! 하고 쓸 줄 아는 상태에서 더 복잡한 코드나 모르는 것이 나왔을 때 검색의 도움을 받아야 하는 것이지
구구단 출력이나 별 만들기 등 정말 간단한 코드는 할 줄 알아야 한다고 생각합니다.
물론 배우고 있는 입장에 저도 문법이 헷갈리고 외워지지 않아 뚝딱! 은 못만들어 내지만 최대한 안보고 비슷하게 쓰려고 노력합니다. 
 
오늘은 switch 문에 대해서 설명해보려고 합니다. 
switch 문을 사용하는 이유는 주로 코드를 간결하고 효율적으로 만들기 위해서입니다. 특정 조건에 따라 여러 가지 처리를 할 때 if-else문보다 더 직관적이고 가독성이 높으며, 빠른 실행을 제공하기 때문에 유용하게 쓰입니다. 
switch 문을 공부하면서 문법에 이해가 안되는 부분이 있었습니다. 저와 같은 왕초보가 있을 것 같아, 같이 공유해보고자 글을 작성 하였습니다.  
 
그리고 오늘 제가 외워야 할 문법은 String 변수명 = switch(변수명) 와 switch 구조인 것 같습니다.

🔴반환할 필요가 없는  기존 switch문

switch(it) {
    case "딸기":
    case "키위":
        what = "과일";  // 여러 `case`가 같으면 한번에 처리
        break;
    case "다람쥐":
    case "원숭이":
        what = "동물";
        break;
    default:
        what = "철학자";  // 기본값 처리
}
System.out.printf("%s는 %s 입니다.\n", it, what);

 

🔴표현식 switch 

String kind = switch(animal) {
    case "고양이", "다람쥐", "강아지" -> "포유류";  // 간단한 반환
    case "타조", "참새" -> "조류";
    default -> {  // 여러 줄의 실행문
        System.out.println("다른 동물을 입력하세요");
        yield "알 수 없음";  // 값 반환
    }
};
System.out.println(animal + "은(는) " + kind + "입니다.");

 
1번코드와 2번 코드의 차이점을 설명하자면 

‼️‼️‼️차이점 ‼️‼️‼️

값을 반환하는 방식의 차이가 있습니다.
✔️기존switch문: 값을 반환하지 않고, 단순히 각 case에 대해 출력만 합니다.
✔️ 표현식 switch문: switch에서 값을 반환하려면 yield를 사용합니다. 더 복잡한 작업 후 값을 반환할 수 있습니다.
 
yield 사용 여부:
✔️ 기존 switch: yield는 사용되지 않습니다. switch문 안에서 단순히 실행을 종료하려면 break만 사용됩니다.
✔️ 표현식 switch: yield는 값을 반환하는 데 필요하며, 여러 줄의 코드를 실행할 수 있습니다.
 
가독성과 명확성:
✔️ 기존 switch는 단순하고 직관적입니다.
✔️ 표현식 switch는 값을 반환해야 할 때 명확하고 유연하게 사용됩니다.


‼️‼️‼️비유를 들어 설명‼️‼️‼️

기존 switch문은 마치 여러 선택지 중에서 하나를 고르고, 그에 맞는 행동을 즉시 하는 방식입니다.
표현식 switch문은 마치 선택지에 맞춰 여러 가지 작업을 한 뒤 그 결과를 반환하는 방식입니다. 작업이 끝나면 yield를 사용해 값을 반환하죠.
 
마지막으로 switch 예제 하나 더 보여드리겠습니다.

public static void main(String[] args) {
		Scanner str = new Scanner(System.in);
		
		while(true) {
		System.out.println("원하시는 업무를 선택하세요.");
		String abc = str.next();
		
		if(abc.equals("Q")){
			System.out.println("은행 없무를 종료 합니다.");
			break;
			
		}work(abc); // 사용자가 "Q"를 입력하지 않았다면 다시 while 문으로 돌아감
	}
		
}
		private static void work(String abc) {
			String x = " ";
			switch(abc) {
			case "A":
				x = "입금하기";
				break;
				
			case "B":
				x = "출금하기";
				break;
				
			case "C":
				x = "계좌이체";
				break;
				
				default:
					System.out.println("없는 기능입니다.다시 선택하세요.");
					
				
			}
			System.out.println(x);
			
		}

 
코딩을 잘하시는 분들이 보면 너무 쉬운거 아니야? 할 수 있지만 처음 배우는 사람에겐 어렵습니다.
또한 저도 왕왕왕초보이기에 틀린 부분이 있을 수 있고 잘못 알고 있는 개념이 있을 수 있습니다. 
친절하게 알려주시면 감사하게 생각하고 수정하고 더욱 더 배우겠습니다. 
 
감사합니다.❤️

728x90
반응형
LIST