Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
6분 21초
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"
};Dim usualNames As New List(Of String) From {
"Tim Corey",
"Sue Storm",
"Bilbo Baggins",
"John Doe",
"Princess Donut",
"Steve Rogers"
}
Dim familyNames As New List(Of String) From {
"Charity",
"Jon",
"Chris"
}(You can see these on screen at about 0:38.)
그는 목록을 만듭니다.<string> 사용자가 항목을 하나도 선택하지 않거나, 하나 선택하거나, 여러 개 선택할 수 있기 때문에 favoriteNames라고 부릅니다(0:53–1:01). 그런 다음, 그는 그것을 새로운 MultiSelectionPrompt를 사용하여 AnsiConsole.Prompt의 결과에 할당합니다.<string> () (1:05–1:16).
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);
}For Each name In favoriteNames
Console.WriteLine(name)
Next그는 서식에 대해 걱정하지 않고, 단지 다중 선택 프롬프트가 제대로 작동하는지 보여주고 있을 뿐입니다(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 콘솔 애플리케이션에서 깔끔하고 사용자 친화적인 다중 선택 목록을 빠르게 구현할 수 있습니다.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy