c# 데이터 다루기

2024. 12. 24. 17:40컴퓨터 언어/c#

주말 알바 끝내고 월요일 쉬고 크리스마스이브 다시 책상에 앉았다. 언제나 그랬듯이 솔크이다. 만약 이 글을 보는 사람이 있으면 즐거운 크리스마스를 보내기를 바란다. 아무튼 저번에는 자료형 4가지를 공부했다. 이번에는 이 데이터들을 다루는 법을 공부 할 것이다.

캐스팅

형식 변환이라는 것이 있다. 이걸 캐스팅이라고도 하는데 하나의 자료형을 다른 자료형으로 바꿔주는 것을 말한다. 여기서 알아야 할 것이 자료형마다 저장할 수 있는 데이터양이 다르다 그래서 작은 자료형을 더 큰 자료형으로 바꾸는 것은 문제가 없지만 큰 자료형을 작은 자료형으로 바꾸는 것은 문제가 생길 수 있다. 자세한 설명을 위해 코드를 보겠다.

using System;
    class Program
    {
        static void Main(string[] args)
        {
        int num = 100;
        short a = num;//컴파일에러
        }
    }

이렇게 int형 숫자를 short로 바꾸고 싶어서 저렇게 코드를 짜면 컴파일에러가 난다. 데이터 손실이 일어날 가능성이 있기 때문에 경고를 하는거다. 그래서 우리는 이 컴퓨터 친구에게 괜찮으니깐 시키는 대로 하라고 말해줘야한다. 이걸 명시적 형변환이라고 하는데 간단하다.

using System;
    class Program
    {
        static void Main(string[] args)
        {
        int num = 100;
        short a = (short)num;
        }
    }

이렇게 앞에 바꿀 자료형을 한 번 더 알려주면 된다. 그러면 컴퓨터 친구가 안심하고 바꾼다. 또 다른 명시적 형 변환은 실수형에서 정수형으로 변환 할 때이다. 예를 들어 12.5라는 실수형 숫자를 정수형으로 변환한다 했을 때 정수형으로 변환된 데이터는 12만을 저장 할 것이다. 이러한 데이터 손실 때문에 여기서도 마찬가지로 바꾸고 싶은 자료형을 한번 더 써줘야한다. 

반대로 작은 자료형에서 큰 것으로 바꿀때에는 써주지 않아도 된다. 어차피 자리가 남아서 데이터 손실이 일어나지 않기 때문이다. 코끼리가 사람사는 집에 들어가는게 더 큰일이지 사람이 코끼리 사는 집에 들어가는 것은 문제가 아니지 않는가? 비유가 좀 이상하지만 저런 식으로 생각하면 비슷하게는 이해가 될 것이다. 코드를 보면 차이가 보일 것이다.

using System;
    class Program
    {
        static void Main(string[] args)
        {
        int num = 100;
        short a = (short)num;//명시적 형변환
        float oh = num;//암시적 형변환
        }
    }

이거를 암시적 형변환이라고 한다. 데이터 손실의 걱정이 없어 위와 같이 그냥 자동으로 형 변환을 해준다. 데이터가 잘린다? 그럼 명시적 형 변환 데이터 손실이 걱정없다? 그럼 암시적 형 변환 이런식으로 이해하면 좋을 것 같다. 

스트링 포멧

위에 캐스팅을 실습 해볼때 string을 int형으로 바꾸거나 그 반대를 시도해봤다면 컴파일 에러가 뜨는 것을 확인할 수 있을 것이다.  그럼 이거는 변환이 불가능 한 거냐? 라고 할 수 있는데 방법이 있다. 그전에 C#에서 입 출력 하는 방법을 말하자면 Console.WriteLine();은 출력하는 문법이고(c로 치면 printf) 그리고 Console.ReadLine();은 입력을 받아라 라고 하는 문법이다. (C로 치면 scnaf) 그래서 이걸 왜 이제서야 설명하는가 하면은 int형을 string형으로 형 변환을 할 때 필요하기 때문이다. 간단한 코드를 보여주겠다.

using System;
    class Program
    {
        static void Main(string[] args)
        {
        string str;//문자열 선언	
        str= Console.ReadLine();//문자열 입력 
        Console.WriteLine(str);//문자열 출력
    }
}
//프로그램 결과 입력: hellow 출력:hellow

 이런 식이다.  주의점은  여기서 1을 입력해서 1이 나온다고 그 1이 정수가 아니라 문자 1을 저장한거다. 그럼 정수나 실수를 입력받고 저장하는 방법은 뭐냐 하면은 다음과 같다.

using System;
    class Program
    {
        static void Main(string[] args)
        {
        string str = Console.ReadLine();
        int number = int.Parse(str);
        Console.WriteLine(number);
    }
}

처음 보는 문법이다. Parse 저건 뭐냐? 문자열을 특정 데이터 타입으로 변환 해주는 문법이다. 위의 코드에서 정수가 아닌 수나 문자들을 입력하면 프로그램이 작동하지 않는다. 위의 방법이 문자열 타입을 정수형으로 변환 하는 방법이다. 반대로 int를 string으로 변환 하는 방법이 있다. 

string.Format이라는 문법인데 코드를 한번 보여주겠다.

using System;
    class Program
    {
    static void Main(string[] args)
    {
        int hp = 100;
        int MAX_hp = 100;
        string massage=string.Format("님 체력 {0}/{1} 임..",hp,MAX_hp);//string 변수에 위의 상수 두개를 불러옴
        Console.WriteLine(massage);
    }
}

위에 주석을 단 코드를 보면 {0}과 {1}이 보이는데 저 자리에 뒤에 쓴 순서대로 hp에 저장된 수와 MAX_hp에 저장된 수가 출력 된다. 그래서 불러오는 수가 많아지면 읽기가 불편해진다. 더 깔끔한 코드가 있는데 그 코드는 아래와 같다.

    class Program
    {
    static void Main(string[] args)
    {
        int hp = 100;
        int MAX_hp = 100;
        string massage = $"님 체력 {hp}/{MAX_hp}임....";
        Console.WriteLine(massage);
    }
}

훨씬 읽기 편하고 짧아진 모습이다. 오늘 배운 내용을 이용해서 숫자를 입력받고 입력받은 숫자를 출력하는 코드를 짜보았다.

using System;
    class Program
    {
    static void Main(string[] args)
    {
        string massage = "정수를 입력하시오";
        Console.WriteLine(massage); //출력

        string input=Console.ReadLine();//입력
        int num=int.Parse(input);//입력받은 수를 정수형으로 변환 

        string massage2 = $"입력 받은 정수는 {num} 입니다.";//결과 출력
        Console.WriteLine(massage2);
    }
}

C랑 다르게 좀 복잡한 것 같다. 

'컴퓨터 언어 > c#' 카테고리의 다른 글

비교 연산과 논리 연산  (0) 2025.01.01
산술 연산  (1) 2024.12.27
C# 자료형  (1) 2024.12.20