그룹이 포함된 다중 선택 목록 - Spectre 콘솔 시리즈
Spectre Console은 일반 C# 콘솔 애플리케이션을 시각적으로 풍부하고 상호 작용 가능한 도구로 변환할 수 있도록 해주는 .NET 라이브러리입니다. 정적인 흑백 화면 대신 색상, 레이아웃 및 상호 작용 가능한 선택 사항을 통해 사용자에게 메시지를 표시할 수 있습니다. 이 글에서는 가장 강력한 입력 기능 중 하나인 다중 선택 프롬프트, 특히 선택 그룹 사용 방법에 대해 자세히 살펴보겠습니다.
우리는 Tim Corey의 비디오 " 그룹화를 이용한 다중 선택 목록 - Spectre 콘솔 시리즈 "에서 보여주는 단계별 안내를 따라 이 작업을 수행할 것입니다. 팀은 설명하고, 코드를 보여주고, 실행까지 해주므로 여러분은 이 방법을 자신의 프로젝트에 어떻게 적용할 수 있는지 알 수 있습니다. 아래 각 제목에는 해당 내용이 영상에서 나오는 대략적인 시간이 표시되어 있으므로, 해당 부분으로 바로 이동할 수 있습니다.
다중 선택 프롬프트 소개
비디오 시작 부분에서 Tim Corey는 Spectre Console을 사용하면 "C# 콘솔 앱을 시각적으로 매력적이고 유익한 애플리케이션으로 바꿀 수 있다"고 시청자에게 상기시킵니다(0:02). 그의 시리즈는 도서관을 10분 분량으로 조금씩 살펴봅니다. 이 특정 비디오는 다중 선택 프롬프트(0:18)를 사용하여 사용자가 목록 또는 여러 목록에서 하나 이상의 선택 항목을 선택하도록 요청하는 데 중점을 둡니다.
간단한 다중 선택 프롬프트 설정하기
팀은 먼저 자신의 코드에 이미 있는 두 개의 리스트를 보여줍니다.
List<string> usualNames = new() {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
};
List<string> familyNames = new() {
"Charity",
"Jon",
"Chris"
};List<string> usualNames = new() {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
};
List<string> familyNames = new() {
"Charity",
"Jon",
"Chris"
};(You can see these on screen at about 0:38.)
그는 목록을 만듭니다.
Tim은 각 선택 항목이 문자열 객체가 될 것이며 프롬프트는 사용자가 선택한 항목의 배열 또는 목록을 반환할 것이라고 강조합니다(1:20–1:26).
그런 다음 사용자를 안내하기 위해 사용자 지정 제목을 추가합니다.
.Title("Which are your favorite placeholder names?").Title("Which are your favorite placeholder names?")이렇게 하면 프롬프트 상단에 명확한 헤더가 표시됩니다(1:31~1:50).
사용자 안내를 위한 설명 텍스트 추가
팀은 단순히 직함에만 머무르지 않습니다. 그는 또한 사용자가 프롬프트와 상호 작용하는 방법을 알려주는 안내 텍스트를 추가합니다(1:50).
그는 대략 다음과 같이 씁니다:
.InstructionsText("(Press <space> to toggle, <enter> to accept)").InstructionsText("(Press <space> to toggle, <enter> to accept)")1분 56초에 그는 색상이나 다른 스타일을 사용하여 서식을 지정할 수도 있다고 설명합니다. Spectre Console은 강조 색상을 사용자 지정할 수 있으므로 지침이 녹색, 파란색, 노란색, 회색 또는 빨간색으로 표시되어 주요 부분을 강조할 수 있습니다.
중요한 부분은 사용자에게 다음과 같이 알려주는 것입니다. 스페이스바를 눌러 항목을 전환하고, 엔터 키를 눌러 답변을 수락하세요 (2:12). 이렇게 하면 사용자가 스크립트를 쉽게 사용할 수 있습니다.
선택 항목 추가 및 결과 표시
다음으로 팀은 실제 데이터를 추가합니다. 처음에 그는 하나의 목록으로 간단하게 유지합니다. 그는 .AddChoices(usualNames)를 사용합니다(2:24–2:34).
그런 다음 그는 사용자의 선택 사항을 콘솔에 출력하기 위해 간단한 foreach 루프를 작성합니다(2:38–2:52).
foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}foreach (var name in favoriteNames)
{
Console.WriteLine(name);
}그는 서식에 대해 걱정하지 않고, 단지 다중 선택 프롬프트가 제대로 작동하는지 보여주고 있을 뿐입니다(2:53–3:00).
Tim은 터미널에서 프로그램을 실행합니다(3:00). 프롬프트에는 그의 이름 목록이 표시됩니다. 그는 스페이스바를 사용하여 "Tim Corey"와 "Sue Storm"과 같은 몇 가지 항목을 선택한 다음 Enter 키를 누릅니다. 그러면 콘솔에 선택한 옵션이 출력됩니다(3:07~3:15). 이는 가장 간단한 작동 버전을 보여줍니다.

선택 그룹을 사용하여 여러 목록으로 이동
기본 설정이 완료되자 Tim은 상황을 "조금 더 흥미롭게" 만듭니다(3:22). 그는 하나의 목록 대신 usualNames와 familyNames라는 두 개의 목록을 가지고 있습니다.
그는 원래의 .AddChoices() 호출을 주석 처리하고 .AddChoiceGroup()을 도입합니다(3:32–3:38). 이를 통해 그는 관련 항목들을 하나의 라벨로 묶을 수 있습니다. 그는 이렇게 썼습니다.
.AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames).AddChoiceGroup("The usual names", usualNames)
.AddChoiceGroup("Family names", familyNames)이제 각 그룹이 프롬프트에 개별적으로 나타납니다. 이러한 구조는 특히 수십 가지 옵션을 제시하고 이를 페이지나 그룹으로 정리하려는 경우에 유용합니다. 대화 기록에는 나타나지 않지만, Spectre Console의 다중 선택 프롬프트에는 PageSize 속성이 있어 한 화면에 표시할 항목 수보다 선택 항목이 더 많을 때 한 번에 표시되는 항목 수를 제어할 수 있습니다.
런타임 시 그룹 선택은 어떻게 작동할까요?
Tim은 코드를 저장하고 다시 실행합니다(4:11). 새로운 프롬프트는 두 그룹 모두에 명확한 레이블을 표시합니다. 그가 커서를 "일반적인 이름" 레이블로 이동하고 스페이스바를 누르면 해당 그룹의 모든 항목이 한 번에 선택됩니다(4:17–4:19).
그는 또한 목록이 화면보다 길 경우 Spectre Console이 자동으로 스크롤을 처리한다고 지적합니다. 그러면 회색으로 "더 많은 선택 항목을 보려면 위아래로 움직이세요"라는 메시지가 표시됩니다(4:25~4:31). 스크롤 가능한 목록의 기본 동작입니다.
Tim은 가족 이름까지 스크롤하여 선택한 다음 Sue Storm과 같은 개인을 선택하는 방법을 보여줍니다(4:39–4:43). 그가 Enter 키를 누르면 콘솔에 선택된 모든 이름이 합쳐져 출력됩니다(4:45). 이 예시는 함수가 더 많은 선택지를 표시하고, 선택지를 전환할 수 있도록 한 다음, 선택된 객체들의 목록을 하나로 반환하는 방식을 보여줍니다.

다중 선택 프롬프트와 선택 프롬프트의 차이점 이해하기
5시에 팀이 지금까지 보여준 내용을 요약합니다. 다중 선택 프롬프트는 일반 선택 프롬프트와 유사하게 작동하지만, 입력한 유형의 목록을 반환합니다(5:03–5:08).
그가 했던 것처럼 지시 텍스트를 추가할 수 있으며, 선택 그룹을 사용하여 전체 그룹을 구성하고 필요에 따라 한 번의 키 입력으로 선택할 수 있습니다(5:14–5:18). 이를 통해 사용자는 크거나 복잡한 메뉴를 훨씬 더 쉽게 관리할 수 있습니다.
이는 Spectre Console이 복잡한 객체를 처리할 수 있다는 점을 시사합니다. 즉, 사용자가 선택하는 객체는 문자열 이상일 수 있습니다. ChoiceLabel 속성을 가진 객체를 제공하여 표시되는 내용을 제어할 수 있으며, 사용자가 답변을 수락하면 전체 객체를 반환받을 수 있습니다.
선택 그룹 및 레이블의 유연한 사용
Tim은 또한 .AddChoiceGroup()을 사용하기 위해 두 개의 그룹이 필요하지 않다는 점을 명확히 합니다(5:20–5:24). 단일 그룹이라도 전체 그룹을 한 번에 선택할 수 있다는 장점이 있습니다.
그는 그룹 이름을 "모두 선택"과 같이 더 일반적인 이름으로 지정할 수 있음을 보여줍니다(5:34–5:42). 맨 위 항목을 선택하면 아래의 모든 항목이 토글됩니다(5:44–5:47). 색상 강조 표시(예: 그룹 레이블을 녹색 또는 파란색으로 표시하여 구분)를 사용하여 사용자가 기본 또는 필수 그룹을 쉽게 찾을 수 있도록 안내할 수도 있습니다. 이렇게 하면 프롬프트 구조를 구성하는 데 있어 훨씬 더 많은 유연성을 확보할 수 있습니다.
마무리
Tim은 영상 말미에 다음과 같이 요약합니다. 이것이 Spectre Console을 사용하여 다중 선택 프롬프트를 만드는 방법이며, 그룹 선택을 위한 선택 그룹 추가 방법도 포함됩니다(5:50–5:53). 늘 그렇듯 소스 코드는 설명란에 있습니다(5:57).
팀 코리의 공략에서 얻은 핵심 요점
Spectre Console의 다중 선택 기능을 사용하면 사용자가 목록에서 항목을 하나도 선택하지 않거나, 하나 선택하거나, 여러 개 선택할 수 있습니다.
사용자를 안내하기 위해 제목과 안내 문구를 추가하세요. 강조색을 사용하여 필수 정보를 강조할 수 있습니다.
단순 목록의 경우 .AddChoices()를 사용하고, 여러 개 또는 그룹화된 목록의 경우 .AddChoiceGroup()을 사용하십시오.
사용자는 스페이스 키를 눌러 선택 항목을 전환하고 엔터 키를 눌러 확인합니다.
그룹 레이블 자체를 전환하여 모든 항목을 한 번에 선택할 수 있습니다.
프롬프트는 ChoiceLabel 속성을 사용하여 복잡한 개체를 표시하면서 기본 개체를 반환할 수 있습니다.
- 한 페이지에 표시할 수 있는 것보다 선택지가 많을 경우 페이지 크기 조정 및 스크롤 기능을 활용하세요.
Tim Corey의 실제 이름 목록과 가족 이름 목록을 활용한 예시를 따르면, Spectre 콘솔 애플리케이션에서 깔끔하고 사용자 친화적인 다중 선택 목록을 빠르게 구현할 수 있습니다.

