본문 바로가기
C#/Basic Syntax

[C#] 4. 콘솔 입/출력, Convert 클래스, var 키워드

by 가든가든 2022. 9. 18.
728x90

Console 클래스로는 사용자가 콘솔에서 데이터를 입력하고 이를 다시 콘솔 화면에 출력할 수 있습니다.

  • Console.ReadLine() - 콘솔에서 한 줄을 입력받고, 콘솔에서는 현재 시점에 멈추는 기능이 있어 [Enter]를 누를 때까지 대기합니다.
  • Console.Read() - 콘솔에서 한 문자를 정수로 입력받습니다.
  • Console.ReadKey() - 콘솔에서 다음 문자나 사용자가 누른 기능 키를 가져옵니다.

Console.ReadLine() 사용하기

using System;

namespace N_ReadLine
{
    internal class ReadLine
    {
        public void ReadLineEx()
        {
            Console.Write("이름을 입력하세요 =>");
            String name = Console.ReadLine();
            Console.WriteLine(name);
        }
    }
}

실행 결과

Console.Read() 메서드 사용하기

Console.Read() 메서드를 사용하면 콘솔에서 문자를 하나만 입력받을 수 있습니다.

using System;

namespace N_Read
{
    internal class Read
    {
        public void ReadEx()
        {
            int x = Console.Read();
            Console.WriteLine(x);
            Console.WriteLine(Convert.ToChar(x));
        }
    }
}

Convert 메서드를 사용해서 문자로 변환합니다.

실행결과

  1. A 입력
  2. 정수형 변수 x 에 A의 아스키코드 65가 출력됌
  3. 아스키코드 65를 Convert 클래스에 ToChar 메서드를 사용해서 문자 A로 출력

암시적 형 변환과 명시적 형 변환

형식 변환은 크게 암시적(implicit)(묵시작) 형 변환관 명시적(explicit) 형 변환으로 구분할 수 있습니다. 암시적 형 변환은 변환 형식이 안전하게 유지되며 데이터가 손실되지 않아 특수한 구문이 필요 없습니다.

using System;

namespace N_Conversion
{
    internal class Conversion
    {
        public void ConversionEx()
        {
            //암시적 형 변환
            int number1 = 100;
            long number2 = number1;
            // int 변수보다 long 변수가 더 크기 때문에 그대로 담을 수 있슴.

            //명시적 형 변환
            long number3 = 200;
            int number4 = (int)number3;
            //long 변수 앞에 (int)를 붙여 long을 int를 변경해야 함, 해당 방식을 명시적 형 변환이라고 함.
        }
    }
}
💡 명시적 형 변환을 할 경우에 에러는 발생하지 않지만, int 형식 변수의 크기를 벗어나는 데이터를 저장할 경우 잘못된 데이터가 저장될 수 있으니 주의해야 합니다.

long → int 형식으로 변환하는데 명시적 형 변환을 사용하지 않은 경우

Convert 클래스 문서

Convert 클래스 (System)

 

Convert 클래스 (System)

기본 데이터 형식을 다른 데이터 형식으로 변환합니다.

learn.microsoft.com

실수로 변환하기 예제

using System;

namespace N_Conversion
{
    internal class Conversion
    {
        public void ConversionEx()
        {
            //암시적 형 변환
            int number1 = 100;
            long number2 = number1;
            // int 변수보다 long 변수가 더 크기 때문에 그대로 담을 수 있슴.

            //명시적 형 변환
            long number3 = 200;
            int number4 = (int)number3;
            //long 변수 앞에 (int)를 붙여 long을 int를 변경해야 함, 해당 방식을 명시적 형 변환이라고 함.
            
            //실수 입력받고 변환하기 예제, 간단한 예외처리 추가
            Console.Write("실수를 입력하세요 : ");
            string input = Console.ReadLine();

            //예외처리 X
            //double output = Convert.ToDouble(input); 
            //Console.WriteLine(output);

            if(double.TryParse(input, out double output)) //예외처리 O
            {
                Console.WriteLine(output);
            } else { Console.WriteLine("fail"); }
            

        }
    }
}

C# - Convert vs Parse vs TryParse

 

C# - Convert vs Parse vs TryParse

안녕하세요. 2nan 입니다. 여러분들은 int 형, double 형 등등... 숫자로 형 변환을 할때 어떤 방식으로 변환 하시나요?? 저는 대부분의 경우 Parse 를 사용해 왔습니다. 특별한 이유가 있는것은 아니고

2-nan.tistory.com

이진수 다루기

using System;

namespace N_BinaryString
{
    internal class BinaryString
    {
        public void BinaryStringEx()
        {
            Console.WriteLine(Convert.ToString(15, 2));
            Console.WriteLine(Convert.ToString(15, 2).PadLeft(8,'0')); //자리수 8칸

            byte x = 10;
            Console.WriteLine(
                $"십진수: {x} -> 이진수: {Convert.ToString(x,2).PadLeft(8,'0')}");
        }
    }
}

실행 결과

var 키워드로 암시적으로 형식화된 로컬 변수 만들기

변수를 선언할 때 int, string 등 기본 제공 키워드 대신 var 키워드를 사용하면 입력되는 값에 따라 자동으로 형식이 결정됩니다.

C#에서는 var 변수는 매우 강력한 형식입니다.

C# 컴파일러는 var로 선언된 변수에 저장되는 값을 자동으로 추론해서 적당한 형식으로 변환하는데, 이 기능을 형식 추론(type inference)이라고 합니다.

💡 var 그리고 dynamic 키워드
 자바스크립트 같은 다른 프로그래밍 언어를 알고 있다면 var 키워드가 모든 값을 담고 있어 C#도 동일하다고 오해하곤 합니다. 하지만 C#의 var 키워드는 프로그램 소스 코드 작성의 편의성을 위해 만든 키워드이지 모든 값을 다 담을 수 있는 키워드가 아닙니다. 자바스크립트의 var에 해당하는 C# 키워드는 dynamic입니다.
using System;

namespace N_Var
{
    internal class Var
    {
        public void VarEx()
        {
            int age = 27;
            Console.WriteLine(age);

            var age2 = 30;
            Console.WriteLine(age2);

            var name = "이정원";
            Console.WriteLine(name);

            Console.WriteLine(name.GetType());
            Console.WriteLine(age2.GetType());

            dynamic name2 = "자바스크립트의 var 키워드와 동일한 기능";
            Console.WriteLine(name2 + " / " + name2.GetType());

            //키보드 키 값 읽기
            Console.WriteLine("키보드 아무 키나 입력하세요");
            ConsoleKeyInfo keyid = Console.ReadKey(true);
            Console.WriteLine(keyid.Key); //키
            Console.WriteLine(keyid.KeyChar); //유니코드
            Console.WriteLine(keyid.Modifiers); //Ctrl, Alt, Shift 조합
        }
    }
}

실행 결과

728x90