헐.. 한것도 없는데 벌써 4번쨰 군요 ㄷㄷㄷ
어쩌면.. 제가 쓸 연작중 가장 하이라이트이자.. 제 삶의 정수(?)인
변수에 대해서 이야기 해보도록 하겠습니다.
변수는 변하는 수. variable 이라고 영어로 쓰고
반대되는 개념으로 상수가 있습니다. constant라고 하죠.
변수는 말그대로 값이 변하기 때문에
컴파일 시간이 아닌 런타임(실행중)에 값이 결정되며 시시각각 값이 변하기 때문에 디버깅으로 머리에 쥐가 나게 하는 원흉입니다.
그리고 변수는 값을 저장하는데 쓰입니다.
키보드로 부터 입력을 받던, 네트워크로 무언가를 받던
작게 말하면 변수고, 크게 운용되면 버퍼(buffer)가 되는거죠.
그리고 값을 저장하는데 있어 가장 적절한 크기의 변수를 나누어 놓았는데
char
short
long
int
float
double
boolean
string
등이 존재하며
c언어에서는
정수 - char / short / long / int
실수 - float / double
문자 - char
문자열 - char *(배열)
로 저장하게 됩니다.
정수형의 경우 1,2,3,4 와 같이 소수점 없는 숫자이며
char형은 8bit
short은 16bit
long은 32bit 혹은 16bit
int는 32bit 혹은 cpu가 표기 가능한 가장 큰 사이즈로 표기 됩니다.(마이컴에서는 16bit int형으로도...)
그리고 signed(양수,음수 - 기본값) unsigned(양수만) 두가지 접두를 가지며
정수형에 대해서만 양수/음수를 구분합니다.
일부 언어(ex, java)에서는 예외사항의 문제로 무조건 signed로만 처리하고 있습니다.
아무튼 표현가능한 범위라는 생소한 개념이 존재하는데
컴퓨터는 2비트로 나타내기기에
8bit = 2^8 = 256가지
16bit = 2^16 = 65536 가지
32bit = 2^32 = 대충 42억 가지
를 표현이 가능합니다.
즉,
char -128 ~ 127
short -32768 ~ 32767
int 대충 -21억 ~ 21억
unsigned char 0 ~ 255
unsigned short 0~65535
unsigned int 0~대충 42억
의 값을 표현이 가능합니다.
프로그래밍 책에서는 고전적인 표현으로
"과거에는 램이 금값보다 비싸서 표현가능한 적절한 용량(?)으로 효율적인 사용을 위해 변수타입이 존재한다" 라고 했으나
개인적으로는
"컴퓨터가 해석하기 위한 방법론을 제시하기 위함" 이라고 표현을 합니다.
컴퓨터는 0과 1로만 표현을 하기에
101010101010101101010101101101010110
이라는 값이 존재할 때 이걸 몇 개 끊어 해석을 할지 알 수가 없기 때문이고
해석상의 방법을 제공하기 위해 변수형이라는 것이 존재합니다. (즉, 파싱을 위해서?)