터미널 글자 색상

이번에는 C# 콘솔에서 글자 색상을 조절하는 방법을 적용해봤다. 기본적으로 제공되는 색상을 사용하는 방법과, 추가 색상을 적용하는 방법을 정리해본다.


기본 색상 적용

C#에서는 ConsoleColor를 이용해 기본적인 색상을 사용할 수 있다.

이를 enum으로 정리하여 관리하면 사용성이 좋아 질 것이다.

public enum TEXTCOLOR
{
    BLACK = ConsoleColor.Black,
    BLUE = ConsoleColor.Blue,
    CYAN = ConsoleColor.Cyan,
    DBLUE = ConsoleColor.DarkBlue,
    DCYAN = ConsoleColor.DarkCyan,
    DGRAY = ConsoleColor.DarkGray,
    DGREEN = ConsoleColor.DarkGreen,
    DMAGENTA = ConsoleColor.DarkMagenta,
    DRED = ConsoleColor.DarkRed,
    DYELLOW = ConsoleColor.DarkYellow,
    GRAY = ConsoleColor.Gray,
    GREEN = ConsoleColor.Green,
    MAGENTA = ConsoleColor.Magenta,
    RED = ConsoleColor.Red,
    WHITE = ConsoleColor.White,
    YELLOW = ConsoleColor.Yellow,
}

이렇게 정의한 TEXTCOLOR enum을 활용해 색상을 지정하는 ColorText 메서드를 구현할 수 있다.

// 지정 색상 사용
public static void ColorText(string message, TEXTCOLOR color, bool lineChange = true)
{
    Console.ForegroundColor = (ConsoleColor)color;
    Console.Write(message);
    Console.ResetColor();
    if (lineChange)
        Console.WriteLine("");
}

이제 ColorText("Hello World!", TEXTCOLOR.RED);와 같이 호출하면 글자가 빨간색으로 출력된다.


추가 색상 적용 (RGB 값 사용)

기본 제공 색상 외에도 ANSI TrueColor를 활용하여 RGB 값을 직접 지정할 수 있었다.

// 추가 색상 사용
public static void ColorText(string message, int r=0, int g=0, int b=0, bool lineChange = true)
{
    Console.OutputEncoding = System.Text.Encoding.UTF8;
    Console.Write($"\u001b[38;2;{r};{g};{b}m"); 
    Console.Write(message);
    Console.Write("\u001b[0m");
    if (lineChange)
        Console.WriteLine("");
}

이제 ColorText("Hello", 255, 0, 0);을 호출하면 빨간색으로 출력된다.


구조체를 이용한 RGB 입력 방식

위의 메서드를 더 직관적으로 사용하기 위해 COLOR 구조체를 정의한다.

public struct COLOR
{
    public int r;
    public int g;
    public int b;

    public COLOR(int r = 0, int g = 0, int b = 0)
    {
        this.r = r;
        this.g = g;
        this.b = b;
    }
}

public static void ColorText(string message, COLOR color, bool lineChange = true)
{
    ColorText(message, color.r, color.g, color.b, lineChange);
}

이제 ColorText("Hello", new COLOR(255, 0, 0));을 호출하면 동일하게 빨간색으로 출력된다.


여러 개의 문자열을 한 번에 출력하기

여러 개의 문장을 한 번에 출력할 수 있도록 Dictionary<string, COLOR>를 활용하는 방법도 만들었다.

public static void ColorText(Dictionary<string, COLOR> stringList, bool lineChange = true)
{
    foreach (var item in stringList)
    {
        ColorText(item.Key, item.Value, lineChange);
    }
    if (lineChange)
        Console.WriteLine("");
}

이제 다음과 같이 사용하면 여러 개의 문자열을 각각 다른 색상으로 출력된다.

var textColors = new Dictionary<string, COLOR>
{
    { "Red Text", new COLOR(255, 0, 0) },
    { "Green Text", new COLOR(0, 255, 0) },
    { "Blue Text", new COLOR(0, 0, 255) }
};

ColorText(textColors);

정리

이번 글에서는 C# 콘솔에서 글자 색상을 조절하는 다양한 방법을 제작해봤다.

  • 기본 ConsoleColor를 활용한 색상 지정
  • ANSI TrueColor를 활용한 RGB 색상 지정
  • COLOR 구조체를 활용한 보다 직관적인 사용 방식
  • Dictionary를 활용한 다중 색상 출력 방식

댓글남기기