C# 프로그래밍 2번째 시간 - 변수와 데이터 형식
유니티의 두걸음, C# 공부시작 3일차
오늘은 변수와 데이터형식에 대해서 배우겠습니다!
변수(variable)
변수는 값을 담아두는 상자와 비슷하며, 하나의 데이터값을 가질 수 있습니다.
여기서 정해진 값이 고정되있는게 아니라 계속해서 변할 수도 있어서, 수학의 변수와 비슷한 성질을 가지고 있습니다!
여기서 변수는 담는 데이터에 따라 변수의 자료형이 결정됩니다.
ex) 문자는 char, 정수는 int라는 자료형을 사용합니다.
변수를 선언하기 위해서는 자료형과 변수명이 있어야됩니다.
“자료형 변수명;” 이와 같이, “int a;”로 표현할 수 있습니다.
이 의미는, 정수 하나를 담을 수 있는 상자를 만들어주고, 이 상자이름을 a라고 지어준 것입니다.
그리고 a=100;으로 a라는 상자에 100이라는 값을 넣어준 것입니다.
“여기서 =은 수학에서 같음이 아니라, ‘할당’ 또는 ‘대입’ 의 의미를 가지고 있습니다.
예시로, 정수를 담을 수 있는 자료형과 변수명을 선언하고 값을 부여한 후, 숫자를 출력하는 예제를 만들어보겠습니다.
자료형과 변수 선언 후 숫자출력의 예시
using System;
namespace Study
{
class Program{
static void Main(string[] args){
int a;
a = 100;
Console.WriteLine(a);
}
}
}
여기서 결과는 100으로, 정수형 변수 a를 선언하고 100이란 값으로 변수를 초기화하였습니다.
여기서 초기화는 최초로 데이터를 할당한 것입니다.
추가로, int a = 100; 으로 선언과 동시에 초기화를 할 수도 있습니다.
자료형이 같다면? :
같은 형식의 변수들을 한 줄에 여러 개 선언할 수도 있는데,
int a = 100; int b =200; int c = 300; 처럼, 더 나아가서 한 줄에 여러 개의 변수를 선언할 경우에는 변수명 사이에 콤마를 붙여, int a = 100, b = 200, c = 300; 처럼 사용할 수 있습니다.
기본자료형 (Primitive Types)
C#에서 제공하는 기본 자료형들을 하나의 표로 정리해보았습니다.
구분 | 데이터 형식 | 크기(Byte) | 값의 범위 |
---|---|---|---|
정수 | byte | 1 | 0~255 |
정수 | sbyte | 1 | -128~127 |
정수 | short | 2 | -32,768~32,767 |
정수 | ushort | 2 | 0~65535 |
정수 | int | 4 | -2,147,483,648~2,147,483,647 |
정수 | uint | 4 | 0~4,294,967,295 |
정수 | long | 8 | -922,337,203,685,477,508~922,337,203,685,477,507 |
정수 | ulong | 8 | 0~18,446,744,073,709,551,615 |
문자 | char | 2 | |
실수 | float | 4 | -3.402823e38~3.402823e38 |
실수 | double | 8 | -1.79769313486232e308~1.79769313486232e308 |
실수 | decimal | 1 | ±1.0x10e-28~±7.9x10e2 |
문자열 | string | ||
논리 | bool | 1 | ture,false |
객체 | object |
여기서 모든 데이터 형식의 값의 범위를 알 필요는 없으나, 이런 것이 있다고만 알아두는게 좋을 것 같습니다.
특히, 우리가 많이 쓰는 byte나, int등은 익혀두고 나머지는 참고만 하면 될 것 같습니다!
1. 정수 자료형 :
먼저 정수 자료형부터 다루겠습니다. 여기서 변수는 각각 byte, sbyte, short, ushort, int, uint, ulong으로 선언하여 값을 담고 값을 출력해보겠습니다.
[정수 자료형의 값출력 예시]
using System;
namespace Study
{
class Program
{
static void Main(string[] args){
byte a = 200;
sbyte b = -126;
short c = 30000;
ushort d = 40000;
int e = 100000000;
uint f = 1000000000;
long g = 1000000000000000000;
ulong h = 10000000000000000000;
Console.WriteLine("a={0}, b={1}, c={2}, d={3}, e={4}, f={5}, g={6}, h={7}", a, b, c, d, e, f, g, h);
}
}
}
그리고 이에 맞는 숫자들이 출력될 것입니다.
a=200, b=-126, c=30000, d=40000,e=100000000, f=1000000000, g=1000000000000000000,
h=10000000000000000000
여기서 long과 ulong같은 경우에는 어마어마한 값을 저장할 수 있는데,
작은 숫자를 넣을때는 비트가 작은 int등을 넣는것이 프로그래밍을 짤 때 효율적입니다.
우리가 1이라는 숫자를 넣어야되는데,8비트나 되는 ulong을 넣을 필요가 없는거죠.
마치, 지갑하나를 택배를 붙일때, 냉장고에 넣을 박스를 이용하는 것과 같습니다.
비효율적이고, 그만큼 공간을 많이 차지하여 나중에 프로그램에서 최적화가 되기 힘듭니다.
추가로, 자료형 앞에 u가 붙으면 unsigned의 줄임말로, 부호가 없다는 의미입니다. 그 뜻은, ‘음수의 범위만큼 양수의 범위를 확장했다’라고 생각해두면 됩니다.
2. 실수 자료형 :
다음은 실수 자료형으로, 앞과 마찬가지로 float, double, decimal 형식으로 변수를 선언하여 값을 담고 그 값을 출력해보겠습니다.
[실수 자료형의 값출력 예시]
using System;
namespace Study
{
class Program
{
static void Main(string[] args){
float a = 123.567891011f;
double b = 1234.567878910111213;
decimal c = 1234.56789101112131415161718m;
Console.WriteLine("a={0}, b={1}, c={2}", a, b, c);
}
}
}
당연히 이에 맞는 출력물로
a=123.5679, b=1234.56787891011, c=1234.56789101112131415161718
가 나올 것입니다.
여기서 중요한 것은, float나 decimal형식 같은 경우에는 맨 뒤에 f나 m같은 접미사가 붙어야됩니다. 여기서 접미사를 빼면 에러가 발생합니다.
접미사를 붙여야되는 이유는 C#에서 기본적으로 소수점이 들어간 실수와 상수를 double형식으로 인식해버리기 때문에, “이것이 float형식이다!”라고 나타내주기 위함입니다.
3. 문자, 문자열 자료형 :
다음은 문자를 쓰는 char, 문자열을 쓰는 string형식에 대한 예제를 만들어보겠습니다.
[문자, 문자열 의 값출력 예시]
using System;
namespace Study
{
class Program
{
static void Main(string[] args){
char a = '안';
string b = "녕하세요";
Console.WriteLine("{0}{1}", a, b);
}
}
}
여기서의 값은 “안녕하세요”로 출력됩니다.
여기서의 특징은, 문자는 작은따옴표(‘), 문자열은 큰따옴표(“) 로 만들어줘야됩니다. 문자열은, 하나 이상의 문자들로 구성된 것을 의미합니다.
4. 논리 자료형 :
다음은 참과 거짓을 다루는 bool형식에 대한 예제입니다. bool은 다른 정수, 실수 형식과 다르게 참, 거짓만을 다룰 수 있습니다.
[논리 자료형의 값출력 예시]
using System;
namespace Study
{
class Program
{
static void Main(string[] args){
bool a = true;
bool b = false;
Console.WriteLine("a={0}, b={1}", a, b);
}
}
}
이것에 대한 출력은, a=True, b=False로 나옵니다. 차후에 if문에서 배울때 더 알아보겠습니다.
5. 객체 자료형 :
다음은 객체자료형입니다. 객체(object)를 다루는 object 형식에 대한 예제를 만들겠습니다.
[객체 자료형의 값출력 예시]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Study
{
class Program
{
static void Main(string[] args){
object a = 12345678910;
object b = 12345.67891011;
object c = true;
object d = "안녕하세요";
Console.WriteLine("a={0}, b={1}, c={2}, d={3}", a, b, c, d);
}
}
}
이에 대한 결과로,
a=12345678910, b=12345.67891011, c=True, d=안녕하세요
가 나옵니다.
이 object는 무쌍입니다. 정수든, 실수든, 논리든, 문자열이든 모든 데이터를 담고 처리할 수 있습니다.
여기서 object는 모든 자료형의 최상위 부모 클래스이기 때문입니다. 상속관계와 객체, 클래스도 추후 다루겠습니다.
마치며
여기까지 변수와 데이터형식에 대해서 배웠습니다. 오늘은 예제를 많이 이용하여 직접 구현해보면서 확실히 알아보았는데요!
다음은 지정자와 형식 변환 등 우리가 평소에는 쓰지 않지만, 필요로 하는 부분들과 상수를 배우겠습니다.
Comments