연습 - 문자열 서식 지정 기본 사항 조사
- 20분
이 단원에서는 특히 여러 변수를 사용하는 경우 효율적인 표시를 위해 문자열의 서식을 지정하는 방법을 알아봅니다.
코딩 환경 준비
이 모듈에는 데모 코드를 빌드하고 실행하는 프로세스를 안내하는 실습 활동이 포함되어 있습니다. Visual Studio Code를 개발 환경으로 사용하여 이러한 활동을 완료하는 것이 좋습니다. 이러한 작업에 Visual Studio Code를 사용하면 전 세계 전문가가 사용하는 개발자 환경에서 코드를 더 편안하게 작성하고 실행할 수 있습니다.
참고
이 C# 시리즈에서 다른 Microsoft Learn 모듈을 완료한 경우 코드 샘플용 프로젝트 폴더를 이미 만들었을 수 있습니다. 이 경우 다음 단계 섹션을 건너뛰고 이전 연습에 사용된 Project.cs
파일에서 코드를 삭제할 수 있습니다.
Visual Studio Code를 엽니다. Windows 시작 메뉴(또는 다른 OS의 해당 리소스)를 사용하여 Visual Studio Code를 열 수 있습니다.
Visual Studio Code의 파일 메뉴에서 폴더 열기를 선택합니다.
폴더 열기 대화 상자에서 Windows 바탕 화면 폴더로 이동합니다. 코드 프로젝트를 유지하는 다른 폴더 위치가 있는 경우 해당 폴더 위치를 대신 사용할 수 있습니다. 이 학습에서는 쉽게 기억하고 찾을 수 있는 위치를 사용하는 것이 중요합니다.
폴더 열기 대화 상자에서 폴더 선택을 선택합니다. 작성자를 신뢰하는지 묻는 보안 대화 상자가 표시되면 예를 선택합니다.
Visual Studio Code 터미널 메뉴에서 새 터미널을 선택합니다. 터미널 패널의 명령 프롬프트에 현재 폴더의 폴더 경로가 표시됩니다. 예를 들면 다음과 같습니다.
C:\Users\someuser\Desktop>
터미널 명령 프롬프트에서 지정된 폴더에 새 콘솔 애플리케이션을 만들려면 dotnet new console -o ./CsharpProjects/TestProject를 입력한 다음 Enter 키를 누릅니다. 이 .NET CLI 명령은 .NET 프로그램 템플릿을 사용하여 지정된 폴더 위치에 새 C# 콘솔 애플리케이션 프로젝트를 만듭니다. 이 명령은 CsharpProjects 및 TestProject 폴더를 만들고 TestProject를
.csproj
파일의 이름으로 사용합니다.탐색기 패널에서 CsharpProjects 폴더를 확장합니다. TestProject 폴더와 두 개의 파일, 즉 Program.cs라는 C# 프로그램 파일과 TestProject.csproj라는 C# 프로젝트 파일이 표시됩니다.
탐색기 패널의 편집기 패널에서 코드 파일을 보려면 Program.cs를 선택합니다.
기존 코드 줄을 삭제합니다. 이 모듈을 진행하는 동안 이 C# 콘솔 프로젝트를 사용하여 코드 샘플을 만들고, 빌드하고, 실행합니다.
터미널 패널을 닫습니다.
복합 서식 지정이란?
복합 서식 지정은 문자열 내에서 번호가 매겨진 자리 표시자를 사용합니다. 런타임에 중괄호로 묶은 모든 항목은 해당 위치에 따라서도 전달되는 값으로 확인됩니다.
이 복합 서식 지정의 예제에서는 Format()
데이터 형식 키워드에 string
기본 제공 메서드를 사용합니다. 다음과 같이 Visual Studio Code 편집기에서 코드를 업데이트합니다.
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
이 코드를 실행하면 다음과 같은 출력이 표시됩니다.
Hello World!
이 코드에 대해 알아 두어야 할 몇 가지 중요한 사항이 있습니다.
- 데이터 형식 및 지정된 데이터 형식의 변수에는 특정 작업을 쉽게 수행할 수 있는 "도우미 메서드"가 기본적으로 제공됩니다.
- 리터럴 문자열
"{0} {1}!"
는 런타임에 일부가 대체되는 템플릿을 형성합니다. - 토큰
{0}
은(는) 문자열 템플릿 다음에 나오는 첫 번째 인수, 즉 변수first
의 값으로 바뀝니다. - 토큰
{1}
은(는) 문자열 템플릿 다음에 나오는 두 번째 인수, 즉 변수second
의 값으로 대체됩니다.
참고
숫자 0으로 시작하는 것이 이상하다고 생각할 수도 있습니다. 실제로 소프트웨어 개발에서 매우 일반적입니다. 숫자를 사용하여 식별할 수 있는 항목 시퀀스가 있을 때마다 번호는 일반적으로 0부터 매겨집니다.
코드를 다음과 같이 업데이트합니다.
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);
코드 파일을 저장한 다음 Visual Studio Code를 사용하여 코드를 실행합니다. 다음 출력이 표시됩니다.
World Hello! Hello Hello Hello!
이러한 예제를 확인하면 다음과 같은 몇 가지 사실을 알 수 있습니다.
- 첫 번째
Console.WriteLine()
문의 경우 토큰을 순서에 관계없이 정렬할 수 있습니다. 샘플 코드에는{1}
이전에{0}
이 있습니다. - 두 번째
Console.WriteLine()
문의 경우 토큰을{0}
의 세 인스턴스와 함께 다시 사용할 수 있는지 확인합니다. 또한 두 번째 변수 인수인second
는 사용되지 않습니다. 그러나 코드는 여전히 오류 없이 실행됩니다.
문자열 보간이란?
문자열 보간은 복합 서식 지정을 간소화하는 기술입니다.
번호가 매겨진 토큰을 사용하고 String.Format()
또는 Console.WriteLine()
인수 목록에 리터럴 값 또는 변수 이름을 포함하는 대신, 변수 이름을 중괄호로 묶으면 됩니다.
문자열을 보간하려면
$
지시문 앞에 입력해야 합니다. 이제 복합 서식 지정 대신 문자열 보간을 사용하여 이전 예제와 동일한 예제를 만듭니다. 코드를 다음과 같이 업데이트합니다.string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");
코드 파일을 저장한 다음 Visual Studio Code를 사용하여 코드를 실행합니다. 다음 출력이 표시됩니다.
Hello World! World Hello! Hello Hello Hello!
참고
책과 온라인에서 코드 예를 보면 복합 서식 지정 및 문자열 보간이 모두 사용되는 것을 볼 수 있지만 일반적으로 문자열 보간을 선택해야 합니다.
통화 서식 지정
복합 서식 지정 및 문자열 보간을 사용하여 특정 언어와 문화권에 대해 표시할 값의 서식을 지정할 수 있습니다. 다음 예제에서는 :C
통화 서식 지정자를 사용하여 price
및 discount
변수를 통화로 표시합니다. 코드를 다음과 같이 업데이트합니다.
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
Windows 표시 언어가 “영어(미국)”로 설정된 컴퓨터에서 이 코드를 실행하는 경우 다음과 같이 출력됩니다.
Price: $123.45 (Save $50.00)
중괄호로 묶은 토큰에 :C
를 추가할 경우 int
또는 decimal
중 어떤 것을 사용하는지에 관계없이 숫자 서식이 통화로 지정되는 방식을 이해하세요.
참고
국가/지역 및 언어를 알 수 없는 경우에는 어떻게 되나요? TrydotNet과 같은 “브라우저 내” .NET 편집기에서 이전 코드를 실행하면 다음과 같은 출력이 표시됩니다. Price: ¤123.45 (Save ¤50.00)
국가/지역 화폐의 기호 대신 ¤
기호가 사용됩니다. 통화의 형식에 관계없이 "통화"를 나타내는 데 사용되는 일반 기호입니다. .NET 편집기에서는 현재 위치를 무시하므로 이 기호가 표시됩니다.
사용자의 국가/지역 및 언어가 문자열 서식 지정에 미치는 영향
Windows 표시 언어가 프랑스어로 설정된 프랑스의 컴퓨터에서 이전 코드를 실행하면 어떻게 되나요? 이 경우 다음과 같은 출력이 표시됩니다.
Price: 123,45 € (Save 50,00 €)
이전 "€" 출력의 이유는 문자열 통화 서식 기능이 문화권에 대한 로컬 컴퓨터 설정에 따라 달라지기 때문입니다. 이 컨텍스트에서 "문화권"이라는 용어는 최종 사용자의 국가/지역 및 언어를 나타냅니다. 문화권 코드는 컴퓨터가 최종 사용자의 위치와 언어를 식별하는 데 사용하는 5자 문자열입니다. 문화권 코드는 날짜 및 통화와 같은 특정 정보가 제대로 표시되도록 합니다.
예를 들면 다음과 같습니다.
- 미국의 영어 사용 화자의 문화권 코드는
en-US
입니다. - 프랑스의 프랑스어 사용 화자의 문화권 코드는
fr-FR
입니다. - 캐나다의 프랑스어 사용 화자의 문화권 코드는
fr-CA
입니다.
문화권은 쓰기 시스템, 사용되는 달력, 문자열의 정렬 순서, 날짜 및 숫자 서식 지정(예: 통화 서식 지정)에 영향을 줍니다.
아쉽게도 국가/지역이나 최종 사용자의 언어에 관계없이, 코드가 모든 컴퓨터에서 올바르게 작동하도록 하는 일은 어려운 일입니다. 이 프로세스를 지역화(또는 세계화)라고 합니다. 지역화는 이 모듈에서 다루지 않은 여러 요인에 따라 달라지지만 간단히 말해서 문자열 서식 지정 구문은 사용자의 문화권에 따라 다른 형식을 사용할 수 있습니다.
숫자 서식 지정
숫자 데이터로 작업할 때 쉼표로 천 단위, 백만 단위, 십억 단위 등을 나타내 가독성을 높이는 방식으로 숫자의 서식을 지정할 수 있습니다.
N
숫자 형식 지정자를 사용하면 숫자를 더 읽기 쉽게 만들 수 있습니다. 코드를 다음과 같이 업데이트합니다.
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
en-US
문화권에서 이 내용을 보면 다음과 같은 출력을 관찰할 수 있습니다.
Measurement: 123,456.79 units
기본적으로 N
숫자 서식 지정자는 소수점 뒤에 2개의 숫자만 표시합니다.
더 높은 정밀도를 표시하려면 지정자 뒤에 숫자를 추가할 수 있습니다. 다음 코드에서는 N4
지정자를 사용하여 소수점 뒤에 4자리 숫자를 표시합니다. 코드를 다음과 같이 업데이트합니다.
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
en-US
문화권에서 이 콘텐츠를 보고 있다면, 다음과 같은 결과를 관찰할 수 있습니다.
Measurement: 123,456.7891 units
백분율 서식 지정
P
서식 지정자를 사용하여 백분율 서식을 지정하고 소수 자릿수 2자리로 반올림합니다. 소수점 뒤에 표시되는 값의 수를 제어하려면 뒤에 숫자를 추가합니다. 코드를 다음과 같이 업데이트합니다.
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
en-US
문화에서 이 출력을 보면 다음과 같은 내용이 표시됩니다.
Tax rate: 36.79%
서식 지정 접근 방식 결합
문자열 변수는 서식 지정 기술을 사용하여 만든 문자열을 저장할 수 있습니다. 다음 예제에서는 10진수 및 10진수 수학 결과가 복합 서식 지정을 사용하여 yourDiscount
문자열에 서식을 지정하고 저장합니다.
코드를 다음과 같이 업데이트합니다.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
Console.WriteLine(yourDiscount);
en-US
문화권에서 이 콘텐츠를 보고 계신다면 다음과 같은 출력이 나타납니다.
You saved $7.56 off the regular $67.55 price.
서식이 지정된 여러 문자열을 결합할 수 있습니다. yourDiscount += $"A discount of {(price - salePrice)/price:P2}!";
앞 줄의 코드에 Console.WriteLine()
를 삽입하여 문자열 연결 대신 문자열 보간을 사용함으로써 계산된 백분율을 연결하는 이전 코드를 빌드합니다.
참고
이 문자열 보간 접근 방식에서는 String.Format()
을 사용할 필요가 없습니다.
코드를 다음과 같이 업데이트합니다.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);
en-US
문화권에서 이 단위를 보면 다음과 같은 출력을 확인할 수 있습니다.
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
요약
다음은 문자열 형식에 대해 이 단원에서 다룬 가장 중요한 내용입니다.
- 복합 형식 지정 또는 문자열 보간을 사용하여 문자열의 서식을 지정할 수 있습니다.
- 복합 서식 지정을 사용하는 경우에는
{0}
형식의 대체 토큰을 하나 이상 포함하는 문자열 템플릿을 사용합니다. 또한 순서에 따라 대체 토큰과 일치되는 인수 목록을 제공합니다. 복합 서식 지정은string.Format()
또는Console.WriteLine()
을 사용할 때 작동합니다. - 문자열 보간을 사용하는 경우에는 대체하려는 변수 이름을 중괄호로 묶어 문자열 템플릿에 포함합니다. 문자열 템플릿 앞에
$
지시문을 사용하여 문자열을 보간하도록 지정합니다. :C
지정자를 사용하여 통화 서식을 지정합니다.:N
지정자를 사용하여 숫자 서식을 지정합니다.{myNumber:N3}
와 같이:N
뒤에 숫자를 사용하여 전체 자릿수(소수점 뒤의 값 수)를 제어합니다.:P
형식 지정자를 사용하여 백분율 서식을 지정합니다.- 통화 및 숫자 서식 지정은 사용자의 국가/지역 및 언어(컴퓨터의 설정을 따름)를 포함하는 5자 문자 코드에 해당하는 최종 사용자의 문화권에 따라 다릅니다.