[C#] 표준 입출력

이정석·2024년 1월 20일

CSharp

목록 보기
1/22

표준 입출력

C#에 대한 공부를 시작하였는데 어떤 프로그래밍 언어를 배울 때 가장 먼저 시작하는 것은 역시 입출력이라고 생각한다. C#의 출력방법은 Console.Write()인 것은 알고 있었지만, 입력방법은 몰랐기 때문에 처음부터 공부하는 것이 더 좋다고 생각한다.

출력

C#에서 출력을 하는 방법은 아래 코드와 같이 할 수 있다.

  class Program
  {
      static void Main(string[] args)
      {
          System.Console.WriteLine("Hello World!");
      }
  }

System.Console.WriteLine은 크게 세 부분으로 나눌 수 있는데 아래와 같이 나눌 수 있다.

  • System: 이름 공간(namespace)
  • Console: 클래스
  • WriteLine: 함수

실제로 Visual Studio에서 Console의 정의를 보면 System이라는 namespace에 Console이라는 정적 클래스가 존재하는 것을 볼 수 있다.

using을 사용한다면 더 짧은 방법으로 출력을 할 수 있다. using System;을 위에 적어준다면 System을 생략할 수 있다.

  using System;

  class Program
  {
      static void Main(string[] args)
      {
          Console.WriteLine("Hello World!");
      }
  }

Console 클래스에 정의된 함수들을 보면 출력하는 Write 함수들이 오버로딩 되어있는 것을 알 수 있다. Write 함수는 콘솔창에 출력하는 함수이고 WriteLine은 출력 후 개행문자도 출력하는 함수임을 유추할 수 있다.

더 짧은 방법으로 사용하는 방법이 있다. 바로 using static System.Console;를 추가하는 방법인데 이것을 출력하면 Write 함수를 바로 사용할 수 있다.

  using static System.Console;

  class Program
  {
      static void Main(string[] args)
      {
          WriteLine("Hello World!");
      }
  }

using System;은 System namespace를 직접적인 명시없이 사용하겠다는 의미지만 using static System.Console은 System.Console의 정적 함수를 Console을 부르지 않아도 사용한다는 것을 의미한다.

입력

Console에 정의된 함수들을 보면 Read관련 함수는 총 2개로 ReadReadLine이 있다.

ReadLine은 엔터를 입력할 때, 한줄을 문자열로 받아오는 함수로 아래와 같이 사용할 수 있다.

  using System;

  class Program
  {
      static void Main(string[] args)
      {
          string s = Console.ReadLine();
          Console.WriteLine(s);
      }
  }

정수나 실수를 받아오려면, 한가지 과정을 추가로 해주어야하는데 아래와 같이 문자열을 입력받고 숫자로 변환해주어야 한다.

  using System;

  class Program
  {
      static void Main(string[] args)
      {
          string s = Console.ReadLine();
          int n = Convert.ToInt32(s);
          Console.WriteLine(n);
      }
  }

Read는 한 줄을 입력받는 것이 아니라 문자 하나를 입력받는데 반환형은 정수형인 int이고 저장되는 값은 문자의 아스키코드이다.

  using System;

  class Program
  {
      static void Main(string[] args)
      {
          int n = Console.Read();
          Console.WriteLine(n); // 'A' -> 65
      }
  }

엔터를 입력하지 않아도 입력을 받는 방법이 있는데 ReadKey를 사용하면 된다. ReadKey는 입력 버퍼를 거치지 않고 키보드로부터 직접 입력을 받는 방식으로 동작하는데 특이한 점은 반환형이 ConsoleKeyInfo라는 것이다.

다른 오버로딩으로 intercept라는 bool을 받는 함수가 있는데 이것을 true로 전달하면 콘솔창에 출력하지 말라는 것을 의미한다.

ConsoleKeyInfo의 내부구조는 다음과 같다.

KeyChar로 실제 눌린 문자를 받아올 수 있고 Key로 어떤 문자가 눌렸는지 enum을 확인 할 수 있다. 다른 부분은 생성자와 Equals, 연산자에 관련한 내용들이 구현되어 있다.

profile
게임 개발자가 되고 싶은 한 소?년

0개의 댓글