자바의 변수를 이해하는 순간 컴퓨터에 대해 새롭게 눈을 뜨게 된다.
C나 파이썬 자바 어느 프로그래밍 언어에도 변수가 있다.
기본 개념을 이해하면 다른 언어에도 적용이 되기 때문에 변수를 잘 이해하는 것은 중요하다.
그런데 항상 느끼는 것이지만 변수란 것을 설명하기가 꽤 어렵다.
직관적으로만 설명하면 편하다. 대부분 입문서에서도 직관적으로 설명하고 있고
유명한 원서들도 마찬가지로 직관적인 설명을 선호한다.
아마 변수 자체가 목차 구성으로 봤을 때 항상 앞쪽에 위치하므로
너무 어렵게 설명하는게 좋지 않다고 보는 것 같다.
한권의 프로그래밍 책을 끝까지 봤을 때 와닿는 것들까지 처음에 설명하기 어렵기 때문인 것도 있다.
이 튜토리얼에서도 심플하게 설명하겠다.
변수는 말 그대로 변화하는 수를 말한다.
변수는 숫자카드를 저장할 수 있는 박스같은 것이다.
box라는 변수를 만들어서 넣고 싶은 숫자카드를 넣을 수 있다.
단 하나의 변수에 한개의 카드를 저장할 수 있다. 변수는 변하는 수이기 때문에
중간에 다른 카드로 바꿔도 된다. 아래와 같이 사용한다.
자바의 변수는 자료형과 함께 선언해야 한다. int가 자료형이다.
선언과 동시에 1의 숫자카드를 할당한다. 즉 box라는 변수에 1의 값이 저장된다.
그리고 다음줄에서 box 안에 저장된 1을 버리고 숫자카드 2를 저장한다.
int box = 1;
box = 2;
*실행결과
이게 처음에 실행해봐야 할 변수 사용법이다. box = 여기에 들어가는 숫자를 바꿔보자. 잘 바뀐다.
변수는 box = 10; 이렇게 = 표시는 수학에서는 같다 이지만, 프로그래밍에서
= 는 할당연산자라고 한다. 이 문장은 할당문이다. (assignment statement)
숫자 10을 box라는 변할 수 있는 저장공간에 대입을 하는 것이다.
파이썬 같은 언어의 경우 자료형을 생략해서 좀 더 쉽게 느껴진다.
하지만 자바에서는 반드시 처음에 자료형을 선언해줘야 한다.
자료형 int는 integer의 약자이다. 정수라는 뜻이고 메모리상에서는 4byte를 차지한다. 정수라고 했지만
실제로는 -21억~+21억이 유효범위다. 정확히는 -2의31승~2의31승-1 이다.
변수를 잘 사용하기 위해서는 메모리에 대해서 알고 있어야 한다.
메모리를 들여다보는 것은 사람에게 지루한 일이지만 이 단계를 넘어야
컴퓨터가 무엇을 하는지 알 수가 있고 컴퓨터에게 제대로된 일을 시킬 수 있다.
우선 컴퓨터는 이진법이다. 사람은 보통 10진법에 익숙하다.
대부분의 세상 사람들이 10진법을 배우고 사용하고 있다.
컴퓨터는 이진법이 기본 단위이다. 전압의 높고 낮음을 기준으로
숫자를 표현하고 저장할 수가 있다.
이진법은 0과1 두개의 손가락을 사용하는 것과 같다.
0과 1 그 다음 자리수로 1 이렇게 올라가는 것이다.
적응이 안되는 것은 당연한 것이다. 우린 보통 손가락으로 10진법을
사용하니까...
위의 이진법 그림에 8bit는 8개의 bit (0과1)가 모여서 이루어진 것이고
이것을 byte라고 한다.
자바에서 자료형은 byte의 양으로 나눌 수 있다.
1 byte : byte
2 byte : short
4 byte : int
8 byte : long
이들은 정수형이고 int는 4 byte 이다. 즉 32 bit이다.
자바에서 int box = 0; 을 컴파일 하면 만들어지는 내용이다.
메모리는 byte 단위로 액세스가 된다. 메모리 주소 100(가상의 주소임)부터 104까지 4byte만큼을 box를 위해 할당하고 숫자 0을 저장하는 것이다. byte는 1byte short은 2byte long은 8byte를 메모리에 할당한다. 숫자카드를 1을 넣건 20억을 넣건 그 공간은 자신의 byte만큼 비워두는 것이다. 마지막 비트는 부호(+는 0, -는 1)를 의미한다.
이렇게 보면 컴파일러에서 일어나는 일들은 사람은 참 이해하기 힘들다.
일단 이진법 자체가 암호같이 느껴진다.
하지만 이 단계까지 생각하면서 소스코드를 작성하고 있다면 이미 상당히
컴퓨터의 작동법을 알게 된 것이라고 생각한다. 어디까지나 일반 사람들에 비해서지만...
지금 당장은 변수는 숫자를 넣다 뺏다가 할 수 있는 박스라는 것까지만 생각해도 충분하다.
박스는 크기가 정해져 있어서 정수 자료형의 크기보다 클 수 없다. bit가 제한되어 있으니까.
컴퓨터에 무한대 같은 숫자는 저장이 안된다. 이렇게 생각보다 개인용 PC라는 것은 한계가 금방 보인다.
무한대는 중학교 수학에도 나오는 개념이다. 그런 숫자를 그대로 저장 할 수는 없다는 말이다.
필요한 숫자의 양만큼 메모리도 필요하다. 메모리는 돈을 주고 사야한다.
자원이 한정되어 있다는 점은 변수를 세분화 시키는 이유다.
필요한 양만큼의 변수를 사용하면 메모리를 절약하고 효율적으로 사용할 수 있게된다.
변수를 사용하면서 주의해야할 규칙들은 여러개 있다. 다음 포스트에서 내용을 이어갈 것이다.