본문 바로가기
Development/Group Study

[Part 1] 섹션 2. 데이터 갖고 놀기

by Mobics 2025. 7. 23.

 

목차


    C#과 유니티로 만드는 MMORPG 게임 개발 시리즈

    25.07.22

    Part 1: C# 기초 프로그래밍 입문

     

    섹션 2. 데이터 갖고 놀기

     

    변수

    : 변수는 스토리지 위치를 나타낸다. 모든 변수에는 변수에 저장할 수 있는 값을 결정하는 형식이 있다. 변수 값을 얻으려면 변수를 확실히 할당해야 한다.

    --> 변수를 통해 데이터에 접근하면 실질적으로 RAM에서 알맞는 데이터가 할당된다. 이후, 그 데이터를 쓰고 읽는 단계로 변수를 사용한다.

     

     

    변수 - C# language specification

    이 장에서는 변수 범주, 기본값, 명확한 할당 및 변수 참조를 다룹니다.

    learn.microsoft.com

     

    정수 형식

    출처 : https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types

    --> 사용하고자 하는 데이터의 양에 적합한 정수 형식을 골라 사용하면 메모리를 절약할 수 있다.

     

     

    Integral numeric types

    Learn the range, storage size, and uses for each of the integral numeric types.

    learn.microsoft.com

     

    2진수, 10진수, 16진수

    : 편한 10진수를 두고 2진법이나 16진법을 사용하는 이유는 비트 연산에 유용하기 때문

    • 2진법으로 숫자를 표현할 때는 앞에 '0b'를 붙인다. ex) 3 == 0b11
    • 16진법으로 숫자를 표현할 때는 앞에 '0x'를 붙인다. ex) 17 == 0x11

    ※ 2진법으로 표현된 숫자를 4개씩 끊으면 16진법으로 빠르게 변환할 수 있다.

     

    정수 범위의 비밀

    : 아래 사진에서 Size에 대해 알 수 있다.

    • 'Signed' 는 부호가 있는 것을 의미하며, 최상위 비트로 음수를 표현한다.
    • 8-bit = 1byte = 2⁸ = 256

    출처 : https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types

     

    float

    : 실수형 자료형으로, 값 뒤에 'f'를 붙여 표현한다. 이때, 완전히 정확한 값을 표현하는 것이 아니라 근삿값을 표현한다.

    --> 이와 비슷한 자료형으로는 double이 있으며, float과 double의 차이점은 size로, float은 4byte, double은 8byte이다.

     

    부동 소수점 숫자 형식 - C# reference

    기본 제공 C# 부동 소수점 형식인 float, double 및 decimal에 대해 알아보기

    learn.microsoft.com

     

    string

    : 문자열을 담는 변수로, 내부적으로 텍스트는 char 개체의 순차적 읽기 전용 컬렉션으로 저장된다.

    --> char는 문자를 담는 변수로, Size가 C++에서는 1byte지만, C#에서는 2byte이다.

     

    문자열 - C#

    C# 프로그래밍의 문자열에 대해 알아봅니다. 문자열 선언 및 초기화, 문자열 개체의 불변성 및 문자열 이스케이프 시퀀스에 대한 정보를 참조하세요.

    learn.microsoft.com

     

    bool

    : 참 혹은 거짓으로 데이터를 표현하는 변수 --> 기본값은 false

     

    bool 유형 - C# reference

    C#의 기본 제공 부울 형식에 관한 자세한 정보

    learn.microsoft.com

     

    캐스팅 (형 변환)

    : 형 변환을 할 때에 하려는 작업이 위험성이 있다면 명시적으로 작성해주어야 한다.

    • Size가 큰 형식에서 작은 형식으로 변환할 때 ex) int -> short
    • 다른 타입으로 변환할 때 데이터가 바뀔 위험이 있다면 ex) float -> int
    namespace First
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a = 100;
                short b = (short)a;
    
                float c = 5.5f;
                int d = (int)c;
            }
        }
    }

     

    스트링 포맷

    : string은 다른 변수와 다르게 class에 해당하기 때문에 쉽게 형 변환할 수 없다.

    • string -> int : int.Parse(); 를 활용
    • int -> string : string.Format(); 또는 $ 를 활용 --> string.Format()은 옛날 방식
    namespace First
    {
        class Program
        {
            static void Main(string[] args)
            {
                // string -> int
                string input = Console.ReadLine();
                int number = int.Parse(input);
    
                Console.WriteLine(number);
    
                // int -> string
                int hp = 100;
                int maxHp = 100;
                //string message = string.Format("당신의 HP는 {0}/{1} 입니다.", hp, maxHp);
                string message = $"당신의 HP는 {hp}/{maxHp} 입니다.";
    
                Console.WriteLine(message);
            }
        }
    }

     

    산술 연산

    : 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)

    --> 자기 자신에 '+', '-', '*' 연산을 할 때에는 각각 '+=', '-=', '*=' 으로 줄여서 사용할 수 있다.

    --> 1을 더하고 뺄 때는 '++', '--'으로 줄여서 사용할 수 있다.

     

    ※ 'a++' vs '++a'

    • a++ : a값을 먼저 대입한 다음 +1
    • ++a : a값에 먼저 +1한 다음 대입

    - 예시 1

    namespace First
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a = 10;
    
                Console.WriteLine(a++);
                Console.WriteLine(++a);
            }
        }
    }

    --> 결과값

     

    - 예시 2

    namespace First
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a = 10;
    
                int b = a++;
                // int b = a;
                // a += 1;
    
                Console.WriteLine(b);
    
                int c = ++a;
                // a += 1;
                // int c = a;
    
                Console.WriteLine(c);
            }
        }
    }

    --> 결과값

     

    비교 연산 & 논리 연산

    • 비교 연산 : 작다(<), 작거나 같다(<=), 크다(>), 크거나 같다(>=), 같다(==), 다르다(!=) --> bool 타입으로 반환된다.
    • 논리 연산 : AND(&&), OR(||), NOT(!)
     

    비교 연산자 - 보다 큼 및 보다 작음 연산자를 사용하여 항목 주문 - C# reference

    C# 비교 연산자는 값의 순서를 확인합니다. `>`, `<`, `>=`, `<=` 연산자는 값의 순서를 비교합니다. 값이 다른 값보다 크거나 작은지 확인합니다.

    learn.microsoft.com

     

    부울 논리 연산자 - 부울 and, or, not 및 xor 연산자 - C# reference

    C# 논리 연산자는 부울 피연산자를 사용하여 논리 부정(`!`), 결합(AND - `&`, `&&`), 포함 및 배타적 분리(OR - `|`, `||`, `^`) 연산을 수행합니다.

    learn.microsoft.com

     

    데이터 마무리

    - 'var' 타입

    : 컴파일러가 데이터에 넣어줄 값을 보고 타입을 추론하여 데이터 형식을 지정하는 것

    --> 반드시 선언과 동시에 초기화 해야하며, 지역 변수에만 사용할 수 있다.

     

    ※ 그렇다면 'var'만 사용하면 편할 것 같은데 왜 일일이 변수의 타입을 지정해주는가?

    : 변수의 타입을 명시적으로 작성하는 것이 코드의 가독성 측면에서 좋기 때문에

    --> 하지만 너무 복잡한 타입의 경우 오히려 'var'를 사용하는 것이 코드의 가독성에 좋다.