연습 - 선택적 매개 변수가 있는 메서드
C Sharp 언어를 사용하면 명명된 매개 변수와 선택적 매개 변수를 사용할 수 있습니다. 이러한 형식의 매개 변수를 사용하면 메서드에 제공할 인수를 선택할 수 있으므로 메서드 시그니처에 정의된 구조로 제한되지 않습니다.
명명된 인수를 사용하면 위치가 아닌 이름을 사용하여 매개 변수의 값을 지정할 수 있습니다. 선택적 매개 변수를 사용하면 메서드를 호출할 때 이러한 인수를 생략할 수 있습니다.
이 연습에서는 명명된 매개 변수와 선택적 매개 변수를 모두 사용하는 방법을 알아봅니다.
RSVP 애플리케이션 만들기
이 작업에서는 게스트가 이벤트에 대한 RSVP에 대한 간단한 애플리케이션을 만듭니다. 손님은 일행의 인원수와 알레르기를 알려드립니다. 또한 RSVP를 초대 전용 게스트 목록으로 제한하는 옵션을 추가합니다.
Visual Studio Code 편집기에서 이전 연습의 기존 코드를 모두 삭제합니다.
Visual Studio Code 편집기에 다음 코드를 입력합니다.
string[] guestList = {"Rebecca", "Nadia", "Noor", "Jonte"}; string[] rsvps = new string[10]; int count = 0; void RSVP(string name, int partySize, string allergies, bool inviteOnly) { if (inviteOnly) { // search guestList before adding rsvp } rsvps[count] = $"Name: {name}, \tParty Size: {partySize}, \tAllergies: {allergies}"; count++; } void ShowRSVPs() { Console.WriteLine("\nTotal RSVPs:"); for (int i = 0; i < count; i++) { Console.WriteLine(rsvps[i]); } }이 코드에서는 게스트 목록 및 rsvps를 저장할 변수를 만듭니다.
RSVP메서드는 게스트 정보를 목록에 추가하고,ShowRSVPs메서드는 탭 이스케이프 시퀀스를 사용하여 게스트 정보를 구분하고 총 RSVP를 표시합니다.메서드에
RSVP다음 코드를 입력하여 게스트 목록을 검색합니다.if (inviteOnly) { bool found = false; foreach (string guest in guestList) { if (guest.Equals(name)) { found = true; break; } } if (!found) { Console.WriteLine($"Sorry, {name} is not on the guest list"); return; } }이 코드에서는 지정된 이름이 게스트 목록의 이름과 같은지 확인합니다. 일치 항목이 발견되면 true로 설정하고
found루프를 중단합니다foreach.found가 false일 경우, 메시지를 표시하고return키워드를 사용하여 메서드를 종료합니다.메서드 서명 위에 다음 코드를 추가하여 메서드를
RSVP호출합니다.RSVP("Rebecca", 1, "none", true); RSVP("Nadia", 2, "Nuts", true); RSVP("Linh", 2, "none", false); RSVP("Tony", 1, "Jackfruit", true); RSVP("Noor", 4, "none", false); RSVP("Jonte", 2, "Stone fruit", false); ShowRSVPs();코드를 저장하고 실행하여 다음 출력을 관찰합니다.
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruit
명명된 인수 사용
많은 매개 변수를 허용하는 메서드를 호출할 때 인수가 나타내는 내용을 이해하기 어려울 수 있습니다. 명명된 인수를 사용하면 코드의 가독성을 향상시킬 수 있습니다. 매개 변수 이름 뒤에 인수 값을 지정하여 명명된 인수를 사용합니다. 이 작업에서는 명명된 인수를 사용하는 방법을 연습합니다.
다음 코드 줄을 찾습니다.
RSVP("Linh", 2, "none", false);다음과 같이 메서드 호출을 업데이트합니다.
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);매개 변수의 이름 뒤에 콜론과 값을 제공합니다. 이 구문은 명명된 인수를 정의합니다. 모든 인수의 이름을 지정하지 않아도 됩니다. 예를 들어 다음 구문도 유효합니다.
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);위치 인수와 함께 사용되는 명명된 인수는 올바른 위치에 사용되는 경우 유효합니다. 명명된 인수 뒤에 위치 인수가 없는 한 유효합니다. 예를 들어, 끝에
"Linh"와2를 포함하면 유효하지 않습니다.RSVP(allergies: "none", inviteOnly: false, "Linh", 2);이 코드를 입력하면 다음 오류가 발생합니다.
Named argument 'allergies' is used out-of-position but is followed by an unnamed argument다음 코드 줄을 찾습니다.
RSVP("Tony", 1, "Jackfruit", true);다음과 같이 메서드 호출을 업데이트합니다.
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);명명된 인수는 원래 순서대로 표시할 필요가 없습니다. 그러나 명명되지 않은 인수
Tony는 위치 인수이며 일치하는 위치에 나타나야 합니다.코드를 저장하고 실행하여 다음 출력을 관찰합니다.
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruit명명된 인수를 사용하면 출력이 변경되지 않습니다.
선택적 매개 변수 선언
매개 변수는 기본값이 할당될 때 선택 사항이 됩니다. 인수에서 선택적 매개 변수를 생략하면 메서드가 실행될 때 기본값이 사용됩니다. 이 단계에서는 매개 변수 partySize, allergies, 및 inviteOnly를 선택 사항으로 만듭니다.
선택적 매개 변수를
RSVP정의하려면 다음과 같이 메서드 서명을 업데이트합니다.void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)잠시 시간을 내어 구문을 관찰합니다. 매개 변수는 여전히 쉼표로 구분되지만 매개 변수
partySizeallergiesinviteOnly는 각각 값에 할당됩니다.다음으로, 선택적 매개 변수를 적용하도록
RSVP호출을 업데이트합니다.코드를 다음과 같이 업데이트합니다.
RSVP("Rebecca"); RSVP("Nadia", 2, "Nuts"); RSVP(name: "Linh", partySize: 2, inviteOnly: false); RSVP("Tony", allergies: "Jackfruit", inviteOnly: true); RSVP("Noor", 4, inviteOnly: false); RSVP("Jonte", 2, "Stone fruit", false);각 메서드 호출에서 이름은 생략되지 않습니다. 메서드가 호출되면 필요한 모든 인수가 항상 포함되어야 합니다. 그러나 선택적 인수는 생략할 수 있습니다.
이 코드에서는 Rebecca의 rsvp에서 인수
1, "none", true를 제거했습니다. 이러한 인수는 기본값과 일치하므로 Rebecca의 rsvp 결과는 동일합니다.나디아의 초대 응답에서
inviteOnly인수를 제거했습니다. 기본값inviteOnly의 값이true이므로, 나디아의 RSVP 결과는 동일합니다.토니의 초대 응답에서
partySize인수를 제거했습니다. Tony가 초대를 받은 경우 RSVP에서 기본값partySize이 사용됩니다.Linh와 Noor의 rsvps에서
allergies인수를 제거했습니다. 해당 rsvps는 "Allergies"의none기본값을 표시합니다.코드를 저장하고 실행하여 다음 출력을 관찰합니다.
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruit기본값은 생략된 인수(예:
partySize및allergies.) 대신 사용됩니다.
요약
지금까지 선택적 인수와 명명된 인수에 대해 배운 내용은 다음과 같습니다.
- 매개 변수는 메서드 서명에서 기본값을 설정하여 선택적으로 만들어집니다.
- 명명된 인수는 매개 변수 이름과 콜론 및 인수 값으로 지정됩니다.
- 명명된 인수와 위치 인수를 결합하는 경우 올바른 매개 변수 순서를 사용해야 합니다.