C#/디딤돌 C#

[C#] 2. 기본 형식 I - 메모리 크기 확인, 논리 형식 bool, 문자 형식 char

언휴 2024. 1. 19. 09:04

다루는 내용

2.1 메모리 크기

2.2 논리 형식 bool

2.3 문자 형식 char

2. 기본 형식

 C#에서는 관리할 데이터를 표현하기 위해 형식과 변수를 제공합니다. 

 형식은 표현할 데이터 종류를 약속한 것입니다. 이러한 형식은 변수 선언이나 개체 생성을 통해 구체화합니다. 변수는 구체화 한 데이터에 접근하기 위해 사용하는 것입니다. 

 C#에서 형식은 이미 제공하는 기본 형식과 개발자가 정의해서 사용하는 사용자 정의 형식이 있습니다. 다음은 System namespace에 정의한 기본 형식입니다.

[표 2.1] System 네임스페이스에 정의한 기본 형식들
[표 2.1] System 네임스페이스에 정의한 기본 형식들

  C# 형식에는 기본 형식과 사용자 형식이 있다고 하였습니다. 이 중에 사용자 형식에는 클래스, 구조체와 열거형이 있어요. 이들에 대해서는 뒤에서 다시 자세하게 다룰게요. 

 형식은 분류 방법에 따라 값 형식, 참조 형식, 포인터 형식으로 구분할 수도 있습니다. 

 기본 형식 중에 stringobject은 참조 형식이고 나머지 형식은 값 형식입니다. 값 형식은 변수가 참조하는 메모리에 있는 데이터를 중심으로 같은지 다른지 판단하는 형식입니다. 반면 참조 형식은 변수가 참조하는 메모리가 같은지 다른지 판단하는 형식입니다. 

 값 형식과 참조 형식은 관한 사항은 필요할 때 다시 다루기로 할게요.

 포인터 형식은 Windows API나 기존 C++ 라이브러리 등을 래핑하여 사용할 때 부분적으로 사용할 수 있습니다. 하지만 형식 안전하지 않은 구문을 허용해야 하는 불편함이나 개발자 수준에 따라 버그가 발생할 확률이 높아질 수 있습니다. 이 책에서는 범위를 벗어나는 내용으로 판단하여 다루지 않습니다.

 

2.1 메모리 크기 확인

  기본 형식의 메모리 크기를 확인해 볼게요. 

 sizeof 연산은 지정한 형식의 변수가 사용하는 메모리 바이트 수를 반환합니다.

using System;

namespace _00.메모리_크기_확인
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("bool:{0}", sizeof(bool));
            Console.WriteLine("byte:{0}", sizeof(byte));
            Console.WriteLine("sbyte:{0}", sizeof(sbyte));
            Console.WriteLine("char:{0}", sizeof(char));
            Console.WriteLine("decimal:{0}", sizeof(decimal));
            Console.WriteLine("double:{0}", sizeof(double));
            Console.WriteLine("float:{0}", sizeof(float));
            Console.WriteLine("int:{0}", sizeof(int));
            Console.WriteLine("uint:{0}", sizeof(uint));
            Console.WriteLine("long:{0}", sizeof(long));
            Console.WriteLine("ulong:{0}", sizeof(ulong));
            Console.WriteLine("short:{0}", sizeof(short));
            Console.WriteLine("ushort:{0}", sizeof(ushort));
        }
    }
}

▶ 실행 결과

bool:1
byte:1
sbyte:1
char:2
decimal:16
double:8
float:4
int:4
uint:4
long:8
ulong:8
short:2
ushort:2

[표 2.2] 기본 형식의 메모리 크기
[표 2.2] 기본 형식의 메모리 크기

 

2.2 논리 형식 bool

 bool 형식은 참과 거짓을 표현하는 논리 형식입니다. C#언어에서는 System.Boolean 형식을 bool 이름으로 사용합니다. (System.Boolean 으로 사용할 수도 있습니다.) 

 참은 true, 거짓은 false로 표현할 수 있습니다. 

 다음 코드를 먼저 살펴보세요.

using System;

namespace _01.논리_형식_bool
{
    internal class Program
    {
        static void Main(string[] args)
        {            
            bool check = false;

            int i = 3;
            check = i < 2;
            Console.WriteLine(check);
            check = i > 2;
            Console.WriteLine(check);
        }
    }
}

▶ 실행 결과

False
True

bool check = false; 

 bool 형식 변수 check를 선언하면서 초기 값을 false로 지정한 것입니다. 

 bool 형식 변수는 falsetrue를 값으로 가질 수 있습니다.

 

int i = 3; 

 int 형식 변수 i3으로 초기화하였습니다. 

 

check = i < 2;

Console.WriteLine(check); 

 i값이 2보다 작은지 여부를 판별하여 check 변수에 대입한 것입니다. 판별 결과는 거짓이므로 출력 결과도 False입니다. 거짓을 코드로 표현할 때 false인데 출력은 False로 출력하고 있네요. 

 C# 언어에서는 대소문자를 구분하므로 코드에 False로 표현하면 문법 오류입니다. 물론 Visual Studio에서 쉽게 오류를 확인하여 수정할 수 있어서 크게 신경 쓸 필요는 없어요.

 

check = i > 2;

Console.WriteLine(check); 

 i값이 2보다 큰지 판별하여 check 변수에 대입한 것이죠. 판별 결과는 참이고 출력 결과는 True입니다. 

 논리 형식은 비교 연산이나 논리 형식의 연산 결과로 사용합니다. 이 외에도 조건문이나 반복문 등의 조건 표현에서 중요한 역할을 수행합니다. 

 특별히 언급할 내용은 없으며 필요하면 다시 설명할게요.

 

2.3 문자 형식 char

 char 형식은 문자를 표현하기 위한 형식입니다. C#언어에서는 System.Charchar 형식명으로 사용합니다. (System.Char로도 사용할 수 있습니다.) 

 char 형식은 하나의 문자를 표현할 수 있으며 여러 개의 문자로 구성하는 데이터는 string 형식으로 표현할 수 있으며 문자열이라고 말합니다. 

 char 형식에 사용 가능한 표현은 문자 리터럴과 유니코드 및 16진수 표현입니다. 

 문자 리터럴은 하나의 문자를 단일 따옴표로 감싸서 표현합니다.

char c1 = 'A';

char c2 = ''; 

 

 유니 코드는 \u로 시작하며 문자 코드를 나타내는 네 개의 16진수가 올 수 있습니다. 유니 코드로 표현할 때는 반드시 네 개의 16진수를 표현해야 합니다.

char c3 = '\u0041'; //문자 'A' 유니코드 값

char c4 = '\uAC00'; //문자 '' 유니코드 값

 

 16진수 표현은 \x로 시작하며 문자 코드를 나타내는 네 개의 16진수가 올 수 있습니다. 16진수로 표현할 때는 앞에 오는 0을 생략할 수 있어요.

char c5 = '\x41'; //문자 'A' 유니코드 값

char c6 = '\xAC00'; //문자 '' 유니코드 값

 

 char 형식 변수를 표준 출력하면 문자를 출력합니다. 문자 코드(유니 코드) 값을 확인하려면 정수 형식으로 변환해야 합니다. 형식 변환을 하려면 괄호에 원하는 형식명을 지정하세요. 

Console.WriteLine("{0}: {1:X}", c1,(int)c1);

 {1:X} 에서 X16진수로 출력하라는 표현입니다.

 

 다음 코드는 char 형식 변수에 세 가지 방식으로 표현한 예입니다.

using System;

namespace _02.char_형식
{
    internal class Program
    {
        static void Main(string[] args)
        {
            char c1 = 'A';
            char c2 = '가';
            char c3 = '\u0041'; //문자 'A' 유니코드 값
            char c4 = '\uAC00'; //문자 '가' 유니코드 값
            char c5 = '\x41'; //문자 'A' 유니코드 값
            char c6 = '\xAC00'; //문자 '가' 유니코드 값

            Console.WriteLine("{0}: {1:X}", c1,(int)c1);
            Console.WriteLine("{0}: {1:X}", c2, (int)c2);
            Console.WriteLine("{0}: {1:X}", c3, (int)c3);
            Console.WriteLine("{0}: {1:X}", c4, (int)c4);
            Console.WriteLine("{0}: {1:X}", c5, (int)c5);
            Console.WriteLine("{0}: {1:X}", c6, (int)c6);
        }
    }
}

▶ 실행 결과

A: 41
가: AC00
A: 41
가: AC00
A: 41
가: AC00

*디딤돌 C#은 2024년 1월 18일부터 Escort C#을 기반으로 다시 집필하는 책입니다. *

*상업적 사용은 허용하지 않으며 퍼가기 및 인용 시 출처를 밝혀주세요. *