[TIL] C# - 문자열 보간

MINO·2024년 4월 24일
0
post-thumbnail

2024-04-24

개인 프로젝트의 마감일이 다가오고 있다.
집중하고 또 집중하여 빨리 개인 프로젝트를 끝내고,
아직 못 들어본 강의를 듣고 싶다.


C# 문자열 출력

Text 게임 만들기 도중, 여러 문자열을 칸에 맞춰 정렬하고 싶어 문자열 포맷에 대해 알아보았다.


string.Format

중괄호를 이용하여 코드에서 사용하는 변수나, 서식을 넣어주는 방법.

문자열이 끝나고 콤마(,) 뒤에 순서대로 0,1,2 에 맞게 변수를 넣어주면 됨

string noviceArmor = "수련자 갑옷";
string info = "수련에 도움을 주는 갑옷입니다.";
int price = 1000;
Console.WriteLine("{0} | {1} | {2} G", noviceArmor ,info, price};
// 결과 : 수련자 갑옷 | 수련에 도움을 주는 갑옷입니다. | 1000 G

문자열 보간

문자열 앞에 $ 를 표기하여, 중괄호 안에 변수를 직접 입력하는 방법.

string noviceArmor = "수련자 갑옷";
string info = "수련에 도움을 주는 갑옷입니다.";
int price = 1000;
Console.WriteLine($"{noviceArmor} | {info} | {price} G"};
// 결과 : 수련자 갑옷 | 수련에 도움을 주는 갑옷입니다. | 1000 G

정렬 방법

{ } 사이에 첫번째 인자, 두번째 인자를 통해
왼쪽 정렬, 오른쪽 정렬, 칸 수를 지정할 수 있음.

int i = 2, j = 3;
Console.WriteLine("{0 , 3} * {1 , -3} = {2 , 4}" , i , j ,i * j};
// Console.WriteLine($"{i , 3} * {j , -3} = {i * j , 4}");
// 결과 : __2 * -3_ = ___6 ( _ 는 공백)

위 방법을 통해 문자열을 정렬했지만, 원하는 결과가 나오지 않았다.

문자열 정렬 (한글)

위 코드로 정렬 기준을 맞추었지만, 원하는 결과가 나오지 않았다.
한글을 빼고 영어와 숫자만 출력해보니, 정상적으로 칸에 맞게 출력되었다.

C# 에서 문자열 출력 시 한글의 한 글자와 영어의 한 글자의 길이를 똑같이 1 로 인식하기 때문에 발생하게 되는 것을 알게 되었다.


바이트 수로 계산하는 방법

string strToPrint = "출력할 문자열";

// 10자리 간격에 맞추어 패딩할 길이를 계산
int padLen = 10 - Encoding.Default.GetBytes(strToPrint).Length;

// 왼쪽을 공백으로 PadLen 만큼 패딩한 뒤, 출력할 문자열을 출력 
Console.WriteLine("{0}","".PadLeft(padLen) + strToPrint);

ConsoleTables 라이브러리

ConsoleTables 라이브러리를 추가하는 방법도 있다고 한다.

// using ConsoleTables;
static void Main(String[] args)
{
    var table = new ConsoleTable("one", "two", "three");
    table.AddRow(1, 2, 3)
         .AddRow("this line should be longer", "yes it is", "oh");

    table.Write();
    Console.WriteLine();

    var rows = Enumerable.Repeat(new Something(), 10);

    ConsoleTable
        .From<Something>(rows)
        .Configure(o => o.NumberAlignment = Alignment.Right)
        .Write(Format.Alternative);

    Console.ReadKey();
}

튜터님이 알려주신 라이브러리를 활용하는 방법이다.

새로운 기능을 알아가는 건 좋지만,
프로젝트의 기한이 얼마 남지 않아, 제대로 활용하지 못하였다.


Console.ForegroundColor

Text 로 UI 를 구성하다보니 너무 밋밋해보였다.

콘솔의 글자 색상을 변경하여 밋밋한 UI 를 채우고자 했다.

Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("상점\n");
Console.ResetColor(); // 콘솔 글자 색상 초기화
Console.WriteLine("필요한 아이템을 얻을 수 있는 상점입니다.\n");

결과물

결국, 적절한 방법을 찾지 못해 수작업으로 정렬해주었다.

TIL 마무리

대부분의 게임 기능은 구현하였고, 게임 저장하기 기능만 남았다.


콘솔형 Text 게임을 추상화부터 많은 기능을 구현하기까지 많은 고민과 시행착오가 있었다.

초기 단계에서는 와이어프레임을 작성하며 살을 붙이는 작업이 큰 도움이 되었다.

와이어프레임을 작성하는데, 아직 익숙하지 않아 계속 작성해보며 익숙해져야겠다.


초기 와이어프레임

초기 클래스 설계
profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글