-
switch 조건문 :개발...................../문법 2024. 6. 19. 19:01
switch문 작성 중 이런 메시지가?
Switch must be exhaustive
작성중이던 코드
더보기func modifyMenu(_ contentsOrder: Int, _ contentName: String) { //변경할 항목 선택 switch contentName { //이미지 선택 case "image": print("파일명 변경사항을 입력해주세요.") menus[contentsOrder].image = readLine() ?? "" //메뉴명 선택 case "name": print("메뉴명 변경사항을 입력해주세요.") menus[contentsOrder].name = readLine() ?? "" //가격 선택 case "price": print("가격 변경사항을 입력해주세요.") menus[contentsOrder].price = readLine() ?? "" //상세설명 선택 case "detail": print("상세 설명 변경사항을 입력해주세요.") menus[contentsOrder].detail = readLine() ?? "" }
switch 문은
가능한 모든 경우를 처리해야 하므로 일반적으로 default 케이스를 포함합니다.
default 케이스가 없다면 switch must be exhaustive 오류가 발생합니다.
이는 switch 문이 모든 가능한 값을 처리하지 않았다는 의미입니다.
즉, default를 통해 case 외 상황까지 다룸으로써 예상치 못한 입력에 대비하는 것입니다.
* 예외 : 열거형의 모든 케이스를 명시적으로 처리하거나 값의 모든 범위를 다룰 수 있는 경우
열거형이 아닌 일반적인 상황에서는 default 케이스 작성까지 저 메시지를 볼 수밖에 없다~
오류메시지 없이 완료된 switch문
더보기func modifyMenu(_ contentsOrder: Int, _ contentName: String) { //변경할 항목 선택 switch contentName { (중략) //상세설명 선택 case "detail": print("상세 설명 변경사항을 입력해주세요.") menus[contentsOrder].detail = readLine() ?? "" default: return }
왜 default 케이스에 return이 필요한가?
switch 문이 모든 가능한 값에 대해 처리를 해야 하는데, 주어진 값이 어떤 케이스에도 해당하지 않는다면 default 케이스가 실행됩니다. return을 사용하여 함수의 실행을 종료함으로써 예상하지 못한 입력에 대해 안전하게 처리를 종료할 수 있습니다.
default 케이스 내에서의 return은 switch 문이 지정된 케이스 중 어느 것도 충족하지 않을 때 함수의 실행을 중지하고 호출자에게 반환합니다. 그러나 여기서의 return은 함수가 Void 반환 타입이기 때문에 아무것도 반환하지 않으며 단순히 함수 실행을 종료하는 역할을 합니다. 즉, default 케이스에 해당하는 입력이 들어왔을 때 더 이상 어떤 작업도 수행하지 않고 함수를 끝내도록 합니다.
default의 의미를 명확히 하기 위해선?
default 케이스에서 사용자에게 유효하지 않은 입력이라는 메시지를 출력하도록 하여 더 명확하게 할 수 있습니다.