다루는 내용
2. 기본 형식
C#에서는 관리할 데이터를 표현하기 위해 형식과 변수를 제공합니다.
형식은 표현할 데이터 종류를 약속한 것입니다. 이러한 형식은 변수 선언이나 개체 생성을 통해 구체화합니다. 변수는 구체화 한 데이터에 접근하기 위해 사용하는 것입니다.
C#에서 형식은 이미 제공하는 기본 형식과 개발자가 정의해서 사용하는 사용자 정의 형식이 있습니다. 다음은 System namespace에 정의한 기본 형식입니다.
C# 형식에는 기본 형식과 사용자 형식이 있다고 하였습니다. 이 중에 사용자 형식에는 클래스, 구조체와 열거형이 있어요. 이들에 대해서는 뒤에서 다시 자세하게 다룰게요.
형식은 분류 방법에 따라 값 형식, 참조 형식, 포인터 형식으로 구분할 수도 있습니다.
기본 형식 중에 string과 object은 참조 형식이고 나머지 형식은 값 형식입니다. 값 형식은 변수가 참조하는 메모리에 있는 데이터를 중심으로 같은지 다른지 판단하는 형식입니다. 반면 참조 형식은 변수가 참조하는 메모리가 같은지 다른지 판단하는 형식입니다.
값 형식과 참조 형식은 관한 사항은 필요할 때 다시 다루기로 할게요.
포인터 형식은 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 논리 형식 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 형식 변수는 false와 true를 값으로 가질 수 있습니다.
int i = 3;
int 형식 변수 i를 3으로 초기화하였습니다.
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.Char를 char 형식명으로 사용합니다. (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} 에서 X는 16진수로 출력하라는 표현입니다.
다음 코드는 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#을 기반으로 다시 집필하는 책입니다. *
*상업적 사용은 허용하지 않으며 퍼가기 및 인용 시 출처를 밝혀주세요. *
'C# > 디딤돌 C#' 카테고리의 다른 글
[C#] 3. Console 입출력 개요 - 3.1 서식 지정 문자열, 3.2 수식 포멧 문자열, 3.3 정수 및 실수의 자릿수 지정 (0) | 2024.01.22 |
---|---|
[C#] 2. 기본 형식 II - 다양한 정수 형식, 실수 형식 (1) | 2024.01.22 |
1. C# 소개 (0) | 2024.01.18 |