[ 자료형 ]
숫자
숫자는 크게 정수와 실수 두 가지로 나뉜다.
int age = 22;
int amount = 7;
int level = 100;
정수는 소수점이 없는 숫자를 의미한다. 부호 상관없이 소수점이 없다면 -3, 0, 5와 같은 형태 모두 정수이다.
정수는 int 타입을 사용한다. (integer)
float exp = 2053.234f;
float speed = 15.5f;
double length = 60.12345d;
실수는 소수점이 있는 숫자를 의미한다. 마찬가지로 부호 상관없이 소수점이 있기만 하다면 모두 실수이다.
실수는 float 타입과 double 타입을 사용한다.
float 타입은 소수점 7자리까지 표현할 수 있고, double 타입은 소수점 15~16자리까지 표현할 수 있다.
double은 더 많은 데이터를 저장할 수 있는 대신, 메모리를 더 많이 차지한다. 보통은 소수점 7자리를 넘어가는 경우가 많이 없으므로 float 타입을 더 많이 사용한다.
float exp = 3102.234f; //float 변수에 float 데이터 저장 → 정상
float power = 35.15d; //float 변수에 double 데이터 저장 → 에러
float speed = 12.22; //float 변수에 double 데이터 저장 → 에러
double exp = 3102.234f; //double 변수에 float 데이터 저장 → 에러
double power = 35.15d; //double 변수에 double 데이터 저장 → 정상
double speed = 12.22; //double 변수에 double 데이터 저장 → 정상
정수와 다른 점은 실수는 타입이 2가지이므로 이를 구분하기 위해서 숫자 뒤에 f 또는 d를 써주는 것이다.
float를 사용하고 싶다면 f를, double을 사용하고 싶다면 d를 입력한다. 아무것도 입력하지 않는다면 double로 인식한다.
숫자 뒤에 적는 문자와 데이터 형식은 일치해야 하며, 형식이 다를 경우 오류가 발생한다.
문자
모든 것을 통칭 문자열로 부르고 있지만, 정확히 구분하면 문자와 문자열로 나뉜다.
"프로그래밍"을 예시로 들어보자.
char one = '프';
char two = '로';
char three = '그';
char four = '래';
char five = '밍';
string full = "프로그래밍";
문자는 '프', '로', '그', '래', '밍' 5글자로 이루어져 있으며, 각각의 글자들을 문자라고 부른다.
문자는 char 타입을 사용한다. (character)
"프로그래밍"처럼 여러 글자로 이루어져 있는 것을 문자열이라고 한다.
문자열은 string 타입을 사용한다.
char str1 = '코'; //char 타입에 작은 따옴표 → 정상
char str2 = '코딩'; //char 타입에 여러 글자 → 에러
char str3 = "코"; //char 타입에 큰 따옴표 → 에러
string num1 = "22"; //string 타입에 여러 글자 → 정상
string num2 = "2"; //string 타입에 한 글자 → 정상
string num3 = '2'; //string 타입에 작은 따옴표 → 에러
문자는 작은 따옴표(' ')를 사용해야 하고, 문자열은 큰 따옴표(" ")를 사용해야 한다.
string 타입에는 한 글자 데이터를 저장할 수 있지만, char 타입에는 여러 글자를 저장할 수 없다.
불리언
bool 자료형은 True와 False 두 가지의 값만을 가진다. 주로 값이 맞았는지 틀렸는지 판단하는 논리 연산의 결과로 얻게 된다.
특히 특정한 상황이 되었을 때, 행동 근거가 되는 True 또는 False 결과값을 통해 제어문에서 핵심 기능을 하는 자료형이다.
string name = "김서영";
bool result = name == "김서영"; //name이 김서영과 같다
Console.WriteLine(result); //True
int num = 35;
bool result = num < 19; //num이 19보다 작다
Console.WriteLine(result); //False
정리표
자료형 | 값 | 특징 | 기본값 | 크기 |
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를 붙이거나 아무것도 붙이지 않음 |
0 | 8 byte |
decimal | 실수 | ±1.0 x 10-28 ~ ±7.9228 x 1028 28-29개의 자릿수 |
0 | 16 byte |
[ 형변환 ]
변수에 저장된 자료형을 변환하는 것을 형변환이라고 하며, 캐스팅(casting)이라고도 한다. 자료형이 다양한 만큼 형변환도 다양하다.
그중 숫자 → 숫자, 다른 자료형 → 문자, 문자 → 다른 자료형 변환이 가장 자주 사용된다.
1. 숫자 → 숫자
숫자를 다른 형태의 숫자로 변환하는 것이다. 변환 방법은 변환하고 싶은 변수 앞에 괄호를 하고, 그 안에 자료형을 입력하면 된다.
float → int
int x = 10;
float y = 10.0f;
int z = x + (int)y; //변환하고 싶은 변수 앞에 (자료형) 작성
int → float
int x = 10;
float y = 10.0f;
float z = (float)x + y; //변환하고 싶은 변수 앞에 (자료형) 작성
데이터 손실이 없다면 괄호로 자료형을 입력하지 않아도 된다.
int x = 25;
float y = 25.5f;
float z = x + y; //정상
int 25이 float 25.0f이 될 때 누락되는 값이 없으므로, 다음과 같은 경우에는 따로 형변환을 하지 않아도 정상적으로 작동한다.
int x = 25;
float y = 25.5f;
int z = x + y; //에러
하지만 float 25.5f가 int 25가 될 때 0.5가 누락되므로, y 변수 앞에 (int)를 작성해야 에러가 나지 않는다.
2. 다른 자료형 → 문자
숫자나 bool 자료형을 문자로 변환하는 것이다.
int x = 10;
string xStr = x.ToString(); //"10"
float y = 26.5f;
string yStr = y.ToString(); //"26.5"
bool z = true;
string zStr = z.ToString(); //"True"
변수 뒤에 .ToString()을 붙이면 변환할 수 있다.
3. 문자 → 다른 자료형
문자를 다른 자료형으로 바꾸는 방법은 대표적으로 3가지가 있다.
1) Convert 클래스
string xStr = "10";
int x = Convert.ToInt32(xStr); //10
string yStr = "true";
bool y = Convert.ToBoolean(yStr); //True
Convert.To___(변수)를 이용해서 각각의 자료형으로 변환할 수 있다. 밑줄에는 변환하려는 자료형을 입력한다.
+) 형변환 리스트
다른 자료형에서 문자로의 변환도 가능하다.
ToBoolean | 불 형태로 변환 |
ToChar | 문자로 변환 |
ToString | 문자열로 변환 |
ToSingle | float 실수 형태로 변환 |
ToDouble | double 실수 형태로 변환 |
ToDecimal | decimal 실수 형태로 변환 |
ToInt16 | 16비트 부호 있는 정수로 변환 |
ToInt32 | 32비트 부호 있는 정수로 변환 |
ToInt64 | 64비트 부호 있는 정수로 변환 |
ToSbyte | 8비트 부호 있는 정수로 변환 |
ToByte | 8비트 부호 없는 정수로 변환 |
ToUInt16 | 16비트 부호 없는 정수로 변환 |
ToUInt32 | 32비트 부호 없는 정수로 변환 |
ToUInt64 | 64비트 부호 없는 정수로 변환 |
2) Parse() 함수
string xStr = "10";
int x = int.Parse(xStr); //10
string yStr = "true";
bool y = bool.Parse(yStr); //True
___.Parse(변수)를 이용해서 각각의 자료형으로 변환할 수 있다. 밑줄에는 변환하려는 자료형을 입력한다.
하지만 Convert와 Parse() 함수는 변환할 수 없는 값일 때 에러가 발생한다. 이러한 문제를 해결하기 위해 TryParse() 함수를 사용한다.
3) TryParse() 함수
string exp = "2340";
int num;
int.TryParse(exp, out num); //num = 2340
Console.WriteLine(int.TryParse(exp, out num)); //True
TryParse() 함수는 Parse() 함수와 형태는 동일하다.
차이점은 TryParse() 함수에서는 out이라는 것이 있다. 위 코드를 예시로 설명하자면, exp 변수를 정수로 변환을 시도하고 성공하면 num 변수에 데이터를 저장하는 것이다.
출력을 하면 bool 형태로 결과 값이 나오며, True와 False로 변환 성공 여부를 확인할 수 있다. 위 코드는 변환이 가능하여 불리언 값으로 True가 출력됐다. 만약 변환이 불가능하면 불리언 값으로 False가 출력된다.
string exp = "2340exp";
int num;
bool success;
success = int.TryParse(exp, out num); //success = False
Console.WriteLine(success); //False
위 코드는 변환 성공 여부에 따라 True 또는 False로 표현된 불리언 값을 success 변수에 담아서 저장하는 것이다.
"2340exp"는 정수로 변환할 수 없으므로 success 변수에 False라는 값이 저장됐다.
'Coding > C#' 카테고리의 다른 글
C# 조건문 연습 문제 (0) | 2024.04.13 |
---|---|
C# 조건문 if, else if, else, switch case, 조건부 논리 연산자 (0) | 2024.04.03 |
C# 산술 연산, 논리 연산, 조건부 논리 연산 (1) | 2024.04.03 |
C# 새 프로젝트 추가와 변수 생성, 할당, 활용, 수정 (2) | 2024.03.27 |
C# 설치와 출력 코드 및 주석, 이스케이프 시퀀스 (0) | 2024.03.21 |