24.01.14 TIL - [C#] 기초 (3) : 형변환

JJwoo·2024년 1월 14일
0

C#

목록 보기
3/20
post-thumbnail

🔷 형변환 (Type Conversion)

C#에서는 자료형이 다른 변수 간에 값을 할당하거나 연산을 수행할 수 있다.
이때, 자료형이 다른 변수 간에 값을 할당하거나 연산을 수행하려면
명시적 형변환(explicit casting) 또는 암시적 형변환(implicit casting)을 해주어야 합니다.

한 데이터 타입의 변수를 다른 데이터 타입으로 변환하는 과정.

프로그래밍에서 데이터 타입 간의 호환성을 관리하고, 다양한 연산을 가능하게 하기 위해 필요


형변환이 필요한 상황은 다음과 같다.

  • 데이터 호환성:
    서로 다른 타입의 변수들을 연산할 때 타입 호환성을 보장하기 위해.

  • 자원 관리:
    메모리 사용을 최적화하거나 특정 연산을 위해 더 적합한 타입으로 변환할 때.

  • 연산 결과의 정확도:
    특정 연산에서 더 정확한 결과를 얻기 위해 데이터 타입을 변경할 때.


1) 명시적 형변환

개발자가 코드에 직접 타입 변환을 명시하는 것.

이는 호환되지 않는 타입 간의 변환을 할 때 필요하며, 데이터 손실의 위험이 있을 수 있다.
예를 들어, float 타입을 int 타입으로 변환할 때 소수점 이하가 잘릴 위험이 있다.

명시적 형변환은 다음과 같이 (자료형) 형식으로 수행할 수 있습니다.

btye num1 = 10;
int num2 = (int)num1; // byte형에서 int형으로 암시적 형변환
double num1 = 10.5;
int num2 = (int)num1;  // double을 int로 명시적 형변환, 소수점 이하 손실

2) 암시적 형변환

컴파일러가 자동으로 수행하는 타입 변환.

작은 데이터 타입에서 더 큰 데이터 타입으로 대입하는 경우에

byte, short, char 등 작은 데이터 타입에서 int, long, float 등 더 큰 데이터 타입으로 대입할 때 암시적 형변환이 발생한다.

int num1 = 10;
float num2 = 3.14f;
float result = num1 + num2 
// int형과 float형의 덧셈에서 float형으로 암시적 형변환
int num1 = 10;
float num2 = num1 ; // int형을 float형으로 암시적 형변환
  • 암시적 형변환은 프로그래머가 직접 형변환 코드를 작성하지 않아도 되므로 코드를 간결하게 작성할 수 있습니다.
  • 하지만, 암시적 형변환이 발생하는 경우 데이터 타입을 신중하게 고려하여 코드를 작성해야 합니다.

🏸 형변환의 필요성

  • 다른 타입 간의 연산: 예를 들어, 정수와 부동소수점 수를 더할 때, 하나의 타입으로 일치시켜야 연산이 가능하다.

  • API 또는 라이브러리와의 호환: 특정 함수가 특정 타입의 인수만 받을 때, 해당 타입으로 변환해야 한다.

  • 최적화 및 효율성: 예를 들어, 메모리 사용을 줄이기 위해 큰 타입의 변수를 작은 타입으로 변환할 수 있다.


막간을 이용해 GPT에게 물어본 부분.

비슷한 의미면서도 미묘하게 다른 용어가 많다.


🎆 3) 서로 다른 자료형 간의 형변환

메서드 기반 형변환이라고도 부른다.

메서드를 통한 형변환은 프로그래밍에서 서로 다른 데이터 타입(자료형) 간의 변환을 위해 내장된 함수나 메서드를 사용하는 과정을 말한다. 이런 변환 방법은 타입의 안전성을 보장하고, 변환 과정 중에 발생할 수 있는 예외를 효과적으로 처리할 수 있는 장점을 가지고 있다.

메서드 기반 형변환의 예시:

  1. TryParse

    • TryParse 메서드는 문자열을 특정 타입(예: int, double)으로 변환할 때 사용된다.

    • 변환에 실패해도 예외를 발생시키지 않고, 변환 성공 여부를 bool 값으로 반환한다.

    • 예: int.TryParse("123", out int result)는 "123"을 정수 123으로 변환하고, 성공하면 true를 반환한다.

      string input = "123";
      int.TryParse(input, out int result);
      Console.WriteLine("변환된 값: " + result);
      

  1. Convert.ToInt32

    • Convert.ToInt32 메서드는 다양한 타입의 데이터를 int 타입으로 변환한다.
    • 내부적으로 형변환을 수행하며, 변환할 수 없는 값이 주어지면 예외를 발생시킨다.
    • 예: Convert.ToInt32("123")는 "123"을 정수 123으로 변환한다.
      string input = "123"; // Convert.ToInt32 사용: 문자열을 정수로 변환
      int result = Convert.ToInt32(input);
      Console.WriteLine("변환된 값: " + result);
      

  2. ToString

    • ToString 메서드는 객체를 문자열로 변환한다.

    • 모든 데이터 타입은 ToString 메서드를 가지고 있으며, 해당 데이터 타입의 값을 문자열로 표현한다.

    • 예: 123.ToString()은 정수 123을 문자열 "123"으로 변환한다.

      int num = 123; // ToString 사용: 정수를 문자열로 변환
      string result = num.ToString();
      Console.WriteLine("문자열로 변환된 값: " + result);
      

  1. Parse 메서드

    • Parse 메서드(예: int.Parse, double.Parse)는 문자열을 특정 타입으로 변환한다.
    • 변환할 수 없는 문자열이 주어질 경우 예외를 발생시킨다.
      string input = "123.45"; // double.Parse 사용: 문자열을 double로 변환
      double result = double.Parse(input);
      Console.WriteLine("변환된 값: " + result);

  1. Convert 클래스

    • Convert 클래스는 다양한 타입 변환 메서드를 제공한다(예: Convert.ToDouble, Convert.ToBoolean).

    • 입력 타입에 따라 적절한 변환을 수행하며, 변환할 수 없는 경우 예외를 발생시킨다.

      string input = "true"; // Convert.ToBoolean 사용: 문자열을 bool로 변환
      bool result = Convert.ToBoolean(input);
      Console.WriteLine("변환된 값: " + result);

✏ Console.ReadLine을 이용한 입력 받기

입력을 받기 위해 Console.ReadLine을 사용해봅시다.

string input = Console.ReadLine();

input은 사용자가 입력한 값을 저장하는 변수.

Console.ReadLine 메소드를 호출하면 사용자가 입력한 값이 문자열로 반환되어 input 변수에 저장됩니다.

        static void Main(string[] args)
        {
            Console.Write("Enter your name: ");
            string name = Console.ReadLine(); // 이름 문자열을 입력 받음
            Console.WriteLine("반갑다, {0}!", name);
        }

Console.ReadLine 메소드는 사용자가 입력한 값을 문자열로 반환하므로, 숫자나 논리값을 입력받을 때에는 적절한 형변환을 해주어야 한다.

Split / 한줄에 여러 값 입력받기

  • 사용자로부터 여러 개의 값을 한 줄에 입력받고 싶을 때에는 Console.ReadLine 메소드를 사용하여 입력받은 값을 문자열로 받은 후, string.Split 메소드를 사용하여 문자열을 나누어서 처리할 수 있습니다.

예를 들어, 사용자로부터 공백으로 구분된 두 개의 정수를 입력받아 더하는 코드를 작성해보겠습니다.

Console.Write("Enter two numbers: ");
string input = Console.ReadLine();    // "10 20"과 같은 문자열을 입력받음

string[] numbers = input.Split(' ');  // 문자열을 공백으로 구분하여 배열로 만듦
int num1 = int.Parse(numbers[0]);     // 첫 번째 값을 정수로 변환하여 저장
int num2 = int.Parse(numbers[1]);     // 두 번째 값을 정수로 변환하여 저장

int sum = num1 + num2;                // 두 수를 더하여 결과를 계산

Console.WriteLine("The sum of {0} and {1} is {2}.", num1, num2, sum);

[출력]
Enter two numbers: 10 20
The sum of 10 and 20 is 30.

⚙ var 키워드

  • ) var 키워드
    • C# 3.0부터는 var 키워드를 사용하여 변수를 선언할 수 있습니다.
    • var 키워드를 사용하여 변수를 선언하면 변수의 자료형이 컴파일러에 의해 자동으로 결정됩니다.
    • 즉, 초기화하는 값의 자료형에 따라 변수의 자료형이 결정됩니다.
var num = 10;         // int 자료형으로 결정됨
var name = "keroro";   // string 자료형으로 결정됨
var pi = 3.141592;    // double 자료형으로 결정됨

- var 키워드의 특징
  • var 키워드를 사용하여 변수를 선언할 때에는 초기화하는 값의 자료형에 따라 변수의 자료형이 결정되므로, 변수를 선언하는 시점에서 변수의 자료형을 정확히 알 수 없는 경우에 유용합니다.

>Tip

  • 변수의 이름을 명확하게 지어주는 것이 코드의 가독성을 높이는 데에 큰 도움이 됩니다. 변수의 이름은 변수가 어떤 값을 저장하고 있는지 명확하게 드러나도록 지어주어야 합니다.

  • 변수의 이름이 너무 짧거나 약어로 되어 있으면 코드를 읽는 사람이 변수가 어떤 값을 저장하고 있는지 파악하기 어려울 수 있습니다.

profile
개발 모코코

0개의 댓글