트랙
/
C#
C#
/
연습 문제
/
고등학교 시절 연인
고등학교 시절 연인

고등학교 시절 연인

학습 연습 문제

소개

문자열 서식 지정

C#/.NET에서 문자열을 서식 지정하는 방법에는 크게 두 가지가 있어요. String.Format()을 사용하는 방법과 문자열 보간이에요.

복합 서식 지정

String.Format()은 고정 텍스트와 자리 표시자(문서에서는 _서식 항목_이라고 불러요)로 이루어진 문자열(문서에서는 _복합 서식_이라고 불러요), 그리고 가변 개수의 인자를 받아요. 반환 값은 각 서식 항목을 대응하는 인자로 해석하고, 해석된 값들을 고정 텍스트와 결합해요.

string.Format("I had {0} bitcoins on {1}, the day I forgot my password.", 55.5, new DateTime(2010, 2, 25));
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

이 방식을 기술적으로는 _복합 서식 지정_이라고 해요.

문자열 보간

보간된 문자열은 $가 앞에 붙고, 중괄호로 묶인 런타임 식을 포함해요. 서식 항목의 문법은 $"{<interpolationExpression>}"이에요. 이 방식은 별도의 인자 목록이 필요 없어요. 결과는 String.Format() 방식과 기능적으로 동일해요.

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf} bitcoins on {thatDay}, the day I forgot my password."
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

서식 항목

중괄호 안의 텍스트, 즉 복합 서식에서는 자리 표시자, 문자열 보간에서는 보간 식을 _서식 항목_이라고 불러요.

서식 항목은 최대 세 부분으로 이루어질 수 있어요. 첫 번째는 위의 예제 코드에서 볼 수 있듯 필수인 식 또는 인자 자리 표시자예요. 이에 더해 선택 사항인 맞춤(쉼표 ","로 시작해요)과 선택 사항인 서식 문자열(콜론 ":"으로 시작해요)이 있어요.

{<interpolationExpression>[,<alignment>][:<formatString>]}

_맞춤_은 텍스트가 놓이는 "필드"의 길이를 지정하는데, 맞춤이 양수면 왼쪽에, 음수면 오른쪽에 공백을 채워요.

_서식 문자열_은 숫자에 천 단위 구분 기호를 포함할지, 또는 DateTime 객체의 날짜 부분만 출력할지처럼 텍스트 출력의 형태를 지정해요.

다음 코드는 DateTime 객체의 날짜 부분과 실수를 지수 형식으로 표시하는 예를 보여줘요.

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf:E} bitcoins on {thatDay:d}, the day I forgot my password."
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

string.Format(
    "I had {0:E} bitcoins on {1:d}, the day I forgot my password.",
    loadsOf, thatDay)
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

숫자와 날짜 모두에 대해 표준 서식과 사용자 지정 서식이 있어요. _사용자 지정_과 표준 사이에 중요한 차이는 없는데, 다만 서식 문자를 조합해 사용자 지정 서식 문자열을 만들 수 있다는 점이 달라요.

문화권

각 스레드에는 CultureInfo 인스턴스에 캡슐화된 기본 문화권 Thread.CurrentThread.CurrentCulture가 있어요. 스레드의 문화권은 영국식 날짜 형식 _DD/MM/YYYY_와 미국식 _MM/DD/YYYY_의 차이처럼 지역적 차이에 따라 날짜와 숫자를 어떻게 서식 지정할지 결정해요.

CultureInfo는 IFormatProvider 인터페이스를 구현하고 있어요. 이 인터페이스는 String.Format()의 특정 오버로드에 전달할 수 있으며, 스레드 문화권을 재정의하는 데 사용할 수 있어요.

축자 문자열

축자 문자열을 사용하면 여러 줄로 된 문자열을 만들 수 있어요. 축자 문자열은 @ 기호로 시작해요.

string str = @"
See no wretched
quotes everywhere
";

지침

이 연습 문제에서는 고등학교 커플이 소셜 미디어에서 사랑을 고백할 수 있도록 도와봐요.

1. 커플의 이름을 하트로 구분해 표시하기

두 이름을 받아 하트로 구분해 표시하는 정적 HighSchoolSweethearts.DisplaySingleLine() 메서드를 구현해 보세요. 서식이 적용된 텍스트는 61자 너비여야 하고, 하트는 문자열의 가운데에 있어야 해요.

어떤 이름이든 줄 너비 안에 넉넉히 들어간다고 보장돼요.

HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => "                  Lance Green ♡ Pat Riley                    "

2. 커플의 이니셜을 아스키 아트 하트로 표시하기

두 사람의 이니셜을 플러스 기호로 구분해 표시하는 정적 HighSchoolSweethearts.DisplayBanner() 메서드를 구현해요.

HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
     ******       ******
   **      **   **      **
 **         ** **         **
**            *            **
**                         **
**     L. G.  +  P. R.     **
 **                       **
   **                   **
     **               **
       **           **
         **       **
           **   **
             ***
              *

3. 독일 교환학생들도 로캘을 고려한 서식 덕분에 편안함을 느낄 수 있게 하기

독일에서 온 교환학생들을 위해 교제 시작일과 교제 기간을 보여주는 정적 HighSchoolSweethearts.DisplayGermanExchangeStudents() 메서드를 구현해요.

HighSchoolSweethearts.DisplayGermanExchangeStudents("Norbert", "Heidi", new DateTime(2019, 1, 22), 1535.22f);
// => "Norbert and Heidi have been dating since 22.01.2019 - that's 1.535,22 hours"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

고등학교 시절 연인 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.