Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개임 게발

[C#] 데이터 다루기 - 변수, 자료형, 형변환 본문

개념 정리

[C#] 데이터 다루기 - 변수, 자료형, 형변환

lhgenol 2025. 2. 3. 22:55

변수

데이터를 보관하자

  • "Hello"와 "2025"를 스크립트에 입력해 보자.(이후 이 문자와 숫자를 데이터라고 표현) 그러면 빨간줄이 뜬다.
  • 형식에 맞지 않게 작성해 생긴 문제. 이 "Hello"와 "2025"는 코딩 영역에서 살아남을 수 없다. 코딩 영역에 데이터를 추가하면 지금과 같은 에러가 발생하게 됨
  • 하지만 Console.Write("Hello"); 안에서는 에러가 발생하지 않음. 이 부분이 데이터가 안전하게 있을 수 있는 공간이다.
  • 그런데 데이터가 필요할 때마다 이걸 사용할 수는 없음. 그래서 필요한 게 변수.
  • 변수에 필요한 건 '데이터 형식', '변수 이름', '세미콜론(변수라서 필요한 건 아니지만 항상 세미콜론으로 마무리)'
  • 데이터 형식(집)
    • 문자인지 숫자인지
    • 문자라면 string, 숫자라면 int
  • 변수 이름(집의 이름)
    • 변수를 구분할 수 있는 이름
    • 원하는 이름으로 만들 수 있다. 기본적으로는 어떤 이름이든 상관없음(aaa, bbb, asaasda 이런 거 다 가능)
    • 다만 구분하는 역할을 하는 만큼 의미있는 이름으로 지어야 파악하기 좋다.
    • 쓸 수 없는 문자들은 존재함. 특수문자 및 띄워쓰기
    • 일단은 영어와 숫자, 언더바만으로 만드는 걸 권장
  • 예시
    int age;      <- 숫자 형식을 보관할 수 있는 변수 
    string name;  <- 문자 형식을 보관할 수 있는 변수

변수의 생성과 저장

변수의 생성

  • 데이터 형식과 이름을 정하고 세미콜론으로 마무리하면 변수가 만들어진다.
    string x;
    int y;
  • "Hello" 문자가 들어갈 변수를 x, "2025" 숫자가 들어갈 변수를 y로 만들었다.

변수의 저장

  • 이제 집을 만들었으니 데이터를 이사시키자.
    string x = "hello";
    int y = 2025;
  • 변수에 데이터를 저장할 때는 = 을 이용한다.
  • "hello"가 들어있는 x, 2025가 들어있는 y 변수가 생겼다.
  • 그런데 위의 설명이 없었다면 x, y에 어떤 데이터가 있는지 알기 어려웠을 거다.
  • 그러니 변수의 이름을 좀 더 의미있게 바꿔보자.
    string hi = "hello";
    int year = 2025;
  • hi라는 이름이 x보다 어떤 데이터가 들어 있는 변수인지 좀 더 알기 쉬움
  • 이렇게 유추하기 쉬운 이름을 사용하면 나중에 변수가 많아져도 덜 혼동된다.

변수의 활용

  • 변수를 생성하고 값을 저장하면 이후에 데이터를 입력하는 대신 변수를 활용할 수 있다.
    string hi = "hello";
    int year = 2025;

    Console.WriteLine(hi);
    Console.WriteLine(year);
  • "hello"를 입력하고 싶은 부분에는 변수(hi), 2025를 입력하고 싶은 부분에는 변수(year) 입력

변수의 수정

  • 변수는 계속해서 변하는 수
  • 한번 만들고 끝이 아니라 이후 다른 값을 저장할 수 있다.
    string hi = "hello";
    hi = "helloooo";

    Console.WriteLine(hi);
  • 첫 번째 줄에서 hi라는 변수를 만들고 "hello"라는 값을 저장했다.
  • 두 번째 줄에서 이미 만들어진 hi 변수에 "helloooo"라는 값으로 다시 저장했다.
  • 마지막 줄에서는 이중 가장 마지막 데이터를 가지고 활용한다. (helloooo 활용)
  • 이처럼 변수는 사용하는 순간에 따라 계속해서 변하게 된다.
    string hi = "hello";
    Console.WriteLine(hi);

    hi = "helloooo";
    Console.WriteLine(hi);
  • 이렇게 하면 하나의 변수를 사용했지만 저장된 값에 따라 다른 값이 나타나게 된다.

자료형

숫자 자료형(int, float, double)

    int num = 10;
  • 지금까지는 숫자 변수를 만들 때 int를 사용했다.
  • 하지만 모든 숫자가 int에 저장될 수 있는 건 아님. 숫자에는 정수와 실수가 있기 때문
    int age = 15;
    int amount = 4;
    int level = 100;
  • 정수(int)로는 나이, 갯수, 레벨 등을 표현할 수 있다.
    float exp = 56.5f;
    float speed = 3.2f;
    double lenght = 10.245d;
  • 실수(float, double)로는 경험치, 공격 속도, 길이 등을 표현할 수 있다.
  • float: 소수점 7자리까지 표시 가능
  • double: 소수점 15~16자리까지 표시 가능
  • 그럼 걍 double로 통일하죠?
    • double은 float보다 더 정확하게 데이터를 저장할 수 있지만, 그만큼 저장하는 데 많은 비용을 소모하게 됨
    • PC에는 메모리라는 저장 공간이 있다. 메모리가 지갑이고 만 원이 있는데 double과 float을 이 메모리에 저장하려면 double은 800원, float은 400원이 필요하게 된다. 한정된 돈을 가지고 많은 일을 하려면 비용을 알맞게 계획해야 함
    • 요약: float이 가성비가 좋다

실수의 표현

    float exp = 56.5f;
    float speed = 3.2f;
    double lenght = 10.245d;
  • 데이터의 끝에 f 혹은 d가 붙어있다.
    1   <- 숫자
    "1" <- 문자
  • 같은 1이더라도 숫자 1을 표현할 때와 문자 1을 표현할 때의 작성법이 다르다.
  • 컴퓨터 입장에서는 이 1을 어떻게 사용하라는 건지 알 수 없기 때문
  • 그래서 문자의 경우엔 ""를 붙여서 사용한다.
  • 마찬가지로 소수점 1.1을 사용하려고 할 때 컴퓨터는 이게 float인지 double인지 알 수 없다. 그래서 숫자 뒤에 f나 d를 붙여서 표시해 줌
  • 단 아무런 표시가 없다면 double로 인식한다.
    float exp = 56.5f;   정상 - float 변수에 float 데이터를 저장
    float speed = 56.5;  에러 - float 변수에 double 데이터를 저장
    double exp = 56.5d;   정상 - double 변수에 double 데이터를 저장
    double speed = 56.5;  정상 - double 변수에 double 데이터를 저장

문자열과 문자 자료형(string, char)

    string hi = "hello";
  • 지금까지 위와 같은 "hello" 데이터를 문자라고 설명했다.
  • 하지만 엄밀히 말하면 이건 틀린 말
  • "hello"는 "h", "e", "l", "o"라는 4가지 문자가 합쳐진 데이터다.
  • 이렇게 여러 글자가 합쳐진 것을 문자열(string)이라고 한다.
    string codingClub = "팀스파르타";

    char team_1 = 'h';
    char team_2 = 'e';
    char team_3 = 'l';
    char team_4 = 'o';
  • 그리고 h, e, l, o 라는 각각의 글자들을 문자라고 한다.
  • 문자를 표현하는 자료형은 char (character)

자료형 정리표

  • C#에는 숫자와 문자만이 아닌 많은 데이터 형식이 있다.
  • 우선은 string, int, float, bool 이 4가지만 기억해 줘도 문제 없음

⭐ - 무조건 알아야 함
✅ - 이후에 활용될 수 있는 자료형
기타 - 많이는 안 쓰임

자료형 특징 기본값 크기
bool true , false   false 1 byte
string 문자열 " " 로 감싸야 함 null 계속 변함
✅ char 문자 ' ' 로 감싸야 함 '\0' 2 byte
sbyte 8bit 정수 -128 ~ 127 0 1 byte
✅ byte 8bit 정수 (부호 없음) 0 ~ 255 0 1 byte
✅ short 16bit 정수 –32,768 ~ 32,767 0 2 byte
✅ ushort 16bit 정수 (부호 없음) 0 ~ 65,535 0 2 byte
int 정수 –2,147,483,648 ~ 2,147,483,647 0 4 byte
✅ uint 정수 (부호 없음) 0 ~ 4,294,967,295 0 4 byte
✅ long 64bit ****정수 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0 8 byte
✅ ulong 64bit ****정수 (부호 없음) 0 ~ 18,446,744,073,709,551,615 0 8 byte
float 실수 1.5E-45 ~ 3.4E+38 (7자리 유효)
0.0000001f
뒤에 f를 붙여야 함
0 4 byte
✅ double 실수 5.0E-324 ~ 1.7E+308 (15자리 유효)
0.000000000000001d
뒤에 d를 붙여야 하지만 붙이지 않더라도 double로 인식
0 8 byte
Decimal 실수 ±1.0 x 10-28 ~ ±7.9228 x 1028
28-29개의 자릿수
0 16 byte

형변환(Casting)

  • 변수를 사용할 때 사용하고 있는 자료의 형태를 변환해야 할 일이 있다.
    • 예시) string을 int로, string을 bool로
  • 여러 가지의 자료형이 있는 만큼 다양한 상황에서의 현 변환이 있지만, 그중 가장 많이 사용하고 기본적인 3가지
    1. 숫자를 다른 형태의 숫자로 변환
    2. 다른 자료형을 문자로 변환
    3. 문자를 다른 자료형으로 변환

1. 숫자 -> 숫자(int, float)

  • 숫자를 다른 숫자의 형태로 바꾸는 방법
    int x = 10;
    float y = 10.0f;

    int z = x + (int)y; // 사용하고 싶은 변수 앞에 변경하고 싶은 괄호하고 자료형 명시
  • float -> int
    int x = 10;
    float y = 10.0f;

    float z = (float)x + y; // 사용하고 싶은 변수 앞에 변경하고 싶은 괄호하고 자료형 명시
  • int -> float
  • 데이터의 손실이 없는 경우라면 앞에 괄호로 형태를 명시하지 않더라도 캐스팅이 가능
    • float 1.5f를 int 1로 바꾸려면 0.5의 값이 사라지기 때문에 명시해야 함
    • int 1을 float 1.0f로 바꾸려면 누락될 값이 없어 그냥 사용해도 됨

2. 다른 자료형 -> 문자

  • 숫자나 bool을 문자로 바꾸는 방법
  • 간단하게 뒤에 .ToString을 붙이면 변환할 수 있다.
    int x = 10;
    string xStr = x.ToString(); // "10"

    float y = 10.5f;
    string yStr = y.ToString(); // "10.5"

    bool myBool = true;
    string boolStr = myBool.ToString(); // "true"

3. 문자 -> 다른 자료형

  • 문자를 다른 자료형으로 바꾸는 방법은 조금 복잡하고 다양하다.
  • 대표적인 방법 3가지
    1. Convert 클래스 이용
    2. Parse() 함수 이용
    3. TryParse() 함수 이용
  1. Convert 이용
    string iStr = "10";
    int x;
    x = Convert.ToInt32(iStr); // x : 10

    string bStr = "true";
    bool b;
    b = Convert.ToBoolean(bStr); // b : true
  • Convert를 사용해 각각의 자료형으로 변환하는 방법
  • 형변환 리스트
  1. Parse() 함수 이용
    string iStr = "10";
    int x;
    x = int.Parse(iStr); // x : 10

    string bStr = "true";
    bool b;
    b = bool.Parse(bStr); // b : true
  • Convert와 parse() 함수를 이용하면 변환한 값을 받아올 수 있다.
  • 문제는 변환할 수 없는 값일 때 생김
    string iStr = "10xxxx";
    int x;
    x = Convert.ToInt32(iStr); // x : ??? 에러 발생

    string bStr = "testtest";
    bool b;
    b = bool.Parse(bStr); // b : ???? 에러 발생
  • 이런 식
  1. TryParse() 함수 사용
  • 위와 같은 의도하지 않은 상황에 대처하기 위해 TryParse가 필요하다.
    string iStr = "10";
    int x;
    int.TryParse(iStr, out x); // x : 10

    string bStr = "true";
    bool b;
    bool.TryParse(bStr, out b); // b : true
  • out 개념은 어려우므로 이후 메모리 부분을 참고하자. 일단은 모양만 보자
    string iStr = "10"; // int 로 변환 할 수 있으니 성공
    int x;
    bool isSuccess;
    isSuccess = int.TryParse(iStr, out x); // isSuccess : true
    string bStr = "testtest"; // bool 로 변환 할 수 없으니 실패
    bool b;
    bool isSuccess;
    isSuccess = bool.TryParse(bStr, out b); // isSuccess : false
  • 기존 방법과 다른 점은 반환값으로 캐스팅한 값을 받지 않는다.
  • 반환값은 bool만 받으며 캐스팅이 성공했는지 알려준다.

변수 - 용어 정리

  • 개발에 익숙해지기 위해 몇 가지 용어를 더 알아보자.

선언

    int x; 
  • 변수를 처음에 만드는 것을 '선언'한다고 함
  • 생성한다, 선언한다 둘 다 많이 사용됨

할당

    int x = 10;
  • 변수에 데이터를 넣어주는 것을 '할당'한다고 함

초기화

    int x = 10; <- 처음 데이터가 들어갔을 때 초기화했다고 한다.
    x = 21; 
    x = 31;
  • 맨 처음 데이터를 항당하는 것을 '초기화'한다고 함

데이터

  • 변수에 문자나 숫자가 들어갔을 때 '데이터'라고 함
  • 더 다양한 말로는 '데이터', '값', '리터럴' 등이 있다.

변수의 규칙 - 생성과 사용

  • 변수에 값을 저장하려면 먼저 생성을 해야 함
  • 변수를 생성하는 것과 값을 저장하는 부분을 구분하려면, 변수 앞에 데이터 형식을 붙였는지로 확인하면 된다.

  • 위 예시를 보면 1번에는 데이터 형식 string이 붙어있다.
  • 이 순간 변수를 만들고 데이터를 저장하는 것
  • 하지만 2번에는 데이터 형식이 없다.
  • 여기서는 단순히 이미 만들어진 변수에 데이터만 저장하게 됨

  • 데이터를 저장하기 전에 만들어진 변수가 없아면 에러가 발생함

  • 변수를 만들기 전에 Console을 사용하면 에러가 발생함

  • 변수를 만들고 데이터를 저장 안하고 사용하면 에러가 발생함
  • 결론은 단순하다.
    • 변수를 만든다.
    • 데이터를 저장한 이후 활용한다.

변수의 규칙 - 이름 만들기

  • 변수는 원하는 이름으로 만들어도 되지만 몇 가지 규칙이 있다.

변수 만들기의 재료

  1. 변수를 만드려면 타입과 변수 이름을 모두 입력해야 한다.

  • 둘 중 하나라도 없으면 에러 발생
  1. 한 공간에서 같은 이름의 변수는 만들 수 없다.

  • codingClub이라는 변수 2개를 만들었지만 에러가 발생한 걸 볼 수 있다.
  • 같은 이름의 변수는 1개만 만들 수 있음
  • '한 공간'이라는 것은 이후에 다시 자세하게 언급된다.
  1. 대소문자를 구분한다.

  • 대소문자가 달라도 변수를 만들수는 있다.
  • 다만 이렇게 만들면 각 변수가 어떤 의미를 가지는지 혼란스러울 수 있다.
  • 대소문자 구분은 변수를 여러 개 만들 때가 아닌, 코딩 스탠다드에 의해서 사용하는 게 좋다.
  1. 사용할 수 있는 문자는 정해져 있다.

  • 영어 대/소문자
  • 숫자 (맨 앞에 오면 에러)
  • 언더바 (_)
  • 한글은 코딩 스탠다드 적용이 힘들고 협업에서도 비효율적이라 사용하지 않는 걸 추천