Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Console.KeyAvailable 속성 – 콘솔 키 입력 여부 확인하기

C#의 Console.KeyAvailable 속성은 콘솔 입력 스트림에 키 입력이 대기 중인지 여부를 나타내는 값을 가져오는 데 사용됩니다. 이 속성은 ReadKey()처럼 프로그램 실행을 멈추고 기다리지 않고, 키 입력이 있는지만 즉시 확인할 수 있어서 게임 루프나 백그라운드 작업 중 키 입력을 감지해야 하는 상황에서 특히 유용합니다.

구문

Console.KeyAvailable 속성의 구문은 다음과 같습니다.

public static bool KeyAvailable { get; }

KeyAvailable은 정적(static) 읽기 전용 속성으로, 별도의 매개변수 없이 bool 타입의 값을 반환합니다. 입력 스트림에 키 입력이 있으면 true, 없으면 false를 반환합니다.

주요 특징

  • 키 입력 여부만 확인하며, 실제로 키를 소비(consume)하지 않습니다.
  • 콘솔 창이 아닌 환경에서 호출하면 InvalidOperationException이 발생할 수 있습니다.
  • 일반적으로 Thread.Sleep()과 함께 사용하여 CPU 점유율을 낮추면서 키 입력을 폴링(polling)합니다.

예제 1

다음은 C#에서 Console.KeyAvailable 속성을 구현하는 예제입니다.

using System;
using System.Threading;
class Demo {
    public static void Main(string[] args) {
        ConsoleKeyInfo cs = new ConsoleKeyInfo();
        do {
            Console.WriteLine("\n키를 누르면 화면에 표시됩니다. 종료하려면 'Q' 키를 누르세요.");
            while (Console.KeyAvailable == false)
                Thread.Sleep(100);
            cs = Console.ReadKey(true);
            Console.WriteLine("누른 키: '{0}'", cs.Key);
        }
        while (cs.Key != ConsoleKey.Q);
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

C# Console.KeyAvailable 속성 – 콘솔 키 입력 여부 확인하기

이 예제에서는 while (Console.KeyAvailable == false) 조건문으로 키 입력이 들어올 때까지 100밀리초 간격으로 대기합니다. 키가 입력되면 ReadKey(true)로 해당 키를 읽어 화면에 출력하고, 'Q' 키가 입력될 때까지 반복합니다.

예제 2

이번에는 대기 시간을 200밀리초로 늘리고, 종료 키를 'P'로 변경한 예제입니다.

using System;
using System.Threading;
class Demo {
    public static void Main(string[] args) {
        ConsoleKeyInfo cs = new ConsoleKeyInfo();
        do {
            Console.WriteLine("\n키를 누르면 화면에 표시됩니다. 종료하려면 'P' 키를 누르세요.");
            while (Console.KeyAvailable == false)
                Thread.Sleep(200);
            cs = Console.ReadKey(true);
            Console.WriteLine("누른 키: '{0}'", cs.Key);
        }
        while (cs.Key != ConsoleKey.P);
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

C# Console.KeyAvailable 속성 – 콘솔 키 입력 여부 확인하기

정리

Console.KeyAvailable 속성은 콘솔 애플리케이션에서 키 입력을 논블로킹(non-blocking) 방식으로 감지할 수 있는 간편한 방법을 제공합니다. Thread.Sleep()과 함께 사용하면 불필요한 CPU 자원 낭비를 줄이면서 사용자 입력에 즉각적으로 반응하는 프로그램을 만들 수 있습니다.