[ 개요 ]
프로그래밍에서 가장 기본인 변수의 개념과 사용법에 대해 알아보자
[ 개념 ]
변수란 데이터를 저장할 수 있는 메모리 저장공간의 이름
프로그래밍할 때 생성되는 데이터는 모두 메모리에 저장한다.
쉽게 말하자면 상자가 있어야 물건을 담을 수 있는 것이다.
변수에 값을 대입한다 = 메모리 공간에 값을 대입한다.
이렇게 말할 수 있다.
변수를 사용하는 이유는 메모리에 데이터를 담아야지 이를 실행하고 결과를 출력할 수 있기 때문이다.
[ 변수선언 ]
위의 코드를 풀어서 설명하자면 아래와 같이 설명할 수 있다.
‘int’라는 자료형에 ‘a’라는 변수명으로 변수를 선언한다.
프로그래밍에서 변수를 선언할때는 자료형 + 변수명으로 이루어진다.
※ ' ; ' 은 프로그래밍할 때 문장 끝을 알려주는 역할을 한다
위와 같이 변수를 선언하면
위의 사진처럼 선언한 자료형의 크기만큼 메모리에 할당된다.
저만큼 메모리의 용량을 잡아먹는다는 의미이다.
여기서 ‘자료형’ 이라는 단어와 ‘변수명’ 이라는 단어가 나왔는데 하나하나 설명하겠다.
[ 자료형 ]
음식에 종류에 따라 담는 그릇의 종류도 달라진다.
변수가 음식이라면 자료형은 그릇이라고 표현할 수 있다.
즉, 변수의 종류에 따라 자료형(data type)의 종류도 달라진다.
대표적인 C# 자료형을 소개하자면 위와 같다.
이 밖에도 수많은 자료형들이 있는데 자주 사용하는 자료형들만 기재했다.
그럼 각 자료형의 유형들에 대해 알아보자.
범위
자료형은 값을 표현할 수 있는 범위를 가진다
byte와 int를 예시로 설명하겠다.
byte는 0~255의 범위를 표현할 수 있다.
즉 byte로 선언한 변수는 0이라는 값을 넣을 수도 있고 100이라는 값을 넣을 수도 있고, 255라는 값을 넣을 수 있다.
그러나 -1이하의 값이나 256이상의 값을 넣으면 에러가 난다.
int의 경우 -2,147,483,648 ~ 2,147,483,647의 범위를 표현할 수 있어 byte에 비해 많은 값의 범위를 표현할 수 있지만 byte에 비해 메모리 용량을 많이 잡아먹게된다.
그렇기에 최적화를 하려면 주어진 범위에 알맞은 자료형을 선언하는 것이 좋다.
Ex) 캐릭터의 레벨은 250까지 최대라면 byte라는 자료형을 사용하는 것이 좋겠네!
(해당 자료형에 범위를 초과해서 값을 넣으면 쓰레기 값이 들어가는데 가끔 게임 이슈중에 랭킹 점수 int로 선언했다가 값범위 초과해서 꼴등이 1등이 되는 등의 사고가 터지긴한다…..)
[ 부호 ]
부호는 양수, 음수를 의미한다
int와 Uint를 예시로 설명하겠다.
uint를 보면 int에 U 라는 알파벳이 붙었는데 이는 ‘unsigned’를 의미한다.
‘unsigned’란 ‘부호가 없다’를 의미한다.
즉 uint는 int처럼 32bit만큼 표현할 수 있는데 int의 경우 음수까지 표현할 수 있지만 uint는 0이상의 수만 표현이 가능하다. 대신 int는 최대 2,147,483,647까지 밖에 표현을 못하지만 uint는 최대 4,294,967,295까지 표현이 가능하다.
int a=-1; // (O)
int a= 3,000,000,000; // (X) -> 값의 범위를 초과해서 에러
uint a= 4,294,967,295; // (O)
uint a =-1(X); // -> 음수를 대입해서 에러
※ ' // ' 은 주석을 의미한다. 주석 이후의 글들은 프로그래밍에서 인식을 안하므로 메모 등으로 쓰인다
Ex) 게임 점수를 표현할 때 최대한 큰 숫자까지 표현할 수 있으면서 메모리 용량을 덜 사용하도록 int보다 uint를 사용하는게 좋겠네!
정수와 실수
정수란 자연수와 자연수에 음수들을 통칭한다
예를 들어 …., -3, -2, -1, 0 ,1, 2, 3…. 등이 있다.
실수란 정수를 포함한 유리수와 무리수를 의미한다.
예를 들어 -3, 1.232, e, π 등이 있다.
int의 경우 대표적인 정수형 자료형이고 float의 경우 대표적인 실수형 자료형이니 용도에 맞게 잘 사용해야한다.
int a= 1.23; // (X) -> 정수형 자료형에 실수를 넣어서 에러
float a =1.23; // (O)
float a =5; // (O) ->실수형 자료형에 정수를 넣어도 됨
Ex) 몬스터 체력을 95.23%로 표현이 가능하려면 int보다는 float를 사용해야겠네!
문자
숫자외에도 문자나 문자열을 표현할 수 있는 자료형이 있다.
char은 문자 한글자를 넣는게 가능한 자료형이고 string는 문자열을 넣는게 가능한 자료형이다.
문자 한글자를 넣을때는 작은 따옴표를 사용하고 문자열을 넣을때는 큰 따옴표를 사용한다.
char a= ‘A’; // (O)
char a = ‘Hi’; // (X) -> 여러 문자들을 넣어서 오류
string a = “Hi”; // (O)
참고로 string는 문자열 끝에 개행문자 ‘\n’이 같이 들어간다.
이 부분은 후에 글 쓸 때 설명할텐데 문자열의 끝을 의미하기 위해서 프로그램이 자동적으로 넣어준다고만 알면되겠다.
부울
숫자와 문자외에도 true와 false를 의미하는 자료형도 있다.
컴퓨터는 true(참) 또는 false(거짓)이라는 논리로 작동하기도 한다.
나중에 설명하겠지만 조건문 등에 유용하게 쓰일텐데 true이면 실행시키고 flase면 실행시키지 않게 프로그래밍 할 수 있다.
bool a = true; // (O)
bool a = false; (O) -> false 값을 넣는다고 해서 에러가 나는건 아니다.
프로그램 동작시키면서 일부로 false를 넣어서 실행안하는 경우가 있을 때 유용하게 쓸 수 있다.
[ 변수명 ]
변수명은 사용하려는 목적에 맞게 이름을 짓는게 좋다.
예를 들어 게임 랭킹을 구현하려면 아래와 같이 선언하면된다.
int rank;
그러나 프로그래머 맘대로 변수명을 지을 수 있는건 아니다.
1. 예약어(이미 언어에서 사용하고있는 키워드)는 사용할 수 없다.
int int; // (X)
abstract, as, base, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, delegate, do, double, else, enum, event, explicit, extern, false, finally, fixed, float, for, foreach, goto, if, implicit, in, int, interface, internal, is, lock, long, namespace, new, null, object, operator, out, override, params, private, protected, public, readonly, ref, return, sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort, using, virtual, void, volatile, while
참고로 위의 예약어는 IDE(visual studio같은 프로그램)에서 자동으로 알려주니 외울 필요가 없다.
어떤 예약어가 있는지 궁금하면 블로그 방문해서 확인하면 감사하겠다.
2. 변수 이름은 숫자가 처음에 올 수 없다.
int 1a; // (X)
int a1; // (O) ->첫글자에 숫자가 들어간게 아니므로 가능
3.변수 이름은 특수문자를 사용할 수 없다. ( _(언더바)와 $는 사용할 수 있다 )
int !@a; // (X)
int _a; // (O)
int $a; // (O)
4.변수 이름은 대소문자를 구분하며, 길이에 제한을 두지 않는다.
int a;
int A;
// ->서로 다른 변수
5. 이름사이에는 공백이 삽입될 수 없다.
int a a; // (X)
int a_a; // (O) ->공백을 넣어야할거 같으면 _(언더바)를 넣는 것을 추천한다.
6. 변수 이름은 영문으로 하는 것이 일반적이다.
int 숫자; // -> 동작은 하는데 일반적으로 영어로 선언한다
(옛날에 프로그래밍할 때 어떤 분이 한글로 변수랑 함수 선언하다가 코드가 꼬여서 오류났는데 한글 때문에 오히려 무슨 코드를 짰는지 모르겠어서 못 고쳐준적이 있었다….)
그 외에도 여러규칙들이 있으니 나중에 생각나면 추가하겠다.
[ 변수의 초기화 ]
선언한 변수는 초기화를 할 수 있다.
위에서 설명하느라 벌써 초기화하는 것을 보여준바 있다.
int a=0;
위의 코드를 풀어서 설명하자면
‘int’라는 자료형에 ‘a’라는 변수명으로 변수를 선언하였고 ‘a’라는 변수에 ‘0’이라는 값을 대입하였다
이처럼 변수를 선언하면 값을 넣음으로 초기화 할 수 있다.
참고로 초기화를 하는 이유는 변수를 선언만 하면 해당 변수에 쓰레기 값이라고 부르는 이상한 값이 들어가기 때문에
나중에 오류가 발생할 수 있다.
초기화는 해당 범위내의 값에서 적절한 값을 넣어준다.
아래는 여러방식의 초기화 방법이다.
1. 선언과 동시에 초기화
int a=0;
2. 선언후 초기화
int a;
a=0;
3. 여러 개의 변수 선언과 동시에 초기화
int a=0, b=0;
4. 여러 개의 변수 선언후 초기화
int a,b;
a=0;
b=0;
5. 그 외의 자료형 초기화
float a= 3.14;
double b =3.14;
char c= ‘C’;
string d = “Hello world”;
bool e = true;
참고
'C#문법' 카테고리의 다른 글
[C#문법] Part5-1 연산자:산술연산자 (1) | 2023.01.11 |
---|---|
[C#문법] Part4 주석 (6) | 2023.01.10 |
[C#문법] Part3 형변환(type conversion) (1) | 2023.01.09 |
[C#문법] Part2 사용자 입출력 (1) | 2023.01.09 |
[C#문법] Part1-1 변수(variable): 메모리의 개념 (8) | 2022.12.29 |