변수는 단어 그대로 '변하는 수'라는 뜻을 내포하고 있습니다.변하는 수라는 개념이 너무 추상적이시라면 변수라는 공간에 물건을 넣어준다면 기존의 물건이 새로운 물건으로 변경된다고 생각하시면 좋을 것 같습니다. (상자에 축구공이 들어있는데 농구공을 집어넣었더니 축구공은 사라지고 농구공만 남게 되는것이죠.)
앞선 시리즈에서 진행했던 이클립스 사용 테스트 문구를 인용하여 설명을 드려보겠습니다.
public static void main(String[] args) {
String str = ("Hello, world");
// <형태>
// 자료형 변수이름;
// (또는)
// 자료형 변수이름 = 저장할 값;
}
기본적인 형태의 자료형은 'Primitive Type'으로 변수에 직접 데이터를 저장하는 기능을 가지고 있습니다. (아래의 코드는 'Primitive Type' 의 종류와 크기에 대한 것입니다.)변수에도 각각의 유형과 크기가 있으며 해당 유형과 동일한 값을 넣어줘야 하는데 이러한 유형을 '자료형'이라고 합니다.
'자료형'은 'Primitive Type'과 'Reference Type'으로 나누어집니다.
public static void main(String[] args) {
// <자료형> <크기>
boolean bo = true; // 논리값, 1바이트. '참', '거짓' 판별
byte by = 127; // 정수, 1바이트 -128 ~ 127
short sh = 32767; // 정수, 2바이트 -32768 ~ 32767
char ch = 44032; // 정수, 2바이트(문자) 0 ~ 65535
int num = 1234; // 정수, 4바이트(기본) 약 -21억 ~ 약 21억
long ln = 3000000000L; // 정수, 8바이트 약 -922경 ~ 약 922경
float fl = 1.2F; // 실수, 4바이트
double db = 3.14; // 실수, 8바이트(기본)
}
(해당 자료형의 크기를 모두 외우실 필요는 없으나 주로 사용되는 자료형에 대해서는 암기해주시면 유용합니다~)
먼저 'boolean' 은 논리값으로 'true', 'false' 즉 '참', '거짓'을 판별하는 역할을 수행합니다.
'byte' 는 정수의 가장 작은 값입니다.'byte'의 크기는 '1byte'로 정수 하나당 '1bit'의 크기를 가지며 2의 8승(1byte = 8bit) 으로, 계산해주시면 됩니다. 정수는 음수부터 저장이 가능하니 '-128' ~ '127'까지의 정수가 저장 가능합니다.
(정수의 크기는 1bit당 2의 1승으로 계산해주시면 됩니다.)
'short' 는 '2byte'의 크기를 가지며 '-32768' ~ '32767'까지 저장이 가능합니다.('C언어'와의 호환을 위해서 사용되나 자바에서는 흔히 사용되지 않는다고 합니다.)
'char'는 '2byte'의 크기를 가지며 '0' ~ '65535'의 크기를 가집니다.'char'자료형에서의 의문점은 음수 값이 저장되지 않는다는 것인데요. 그 이유는 'char'이 유니코드 기반 으로 '문자'를 처리하기 때문에 정수의 속성을 가진 문자의 기능을 수행하고 따라서 사칙연산이 적용 가능하다는 부분을 이해하셔야 합니다. 또한 '문자열'과는 다르게 '홑따옴표'('')로 표기합니다.
'int'는 정수자료형 변수에서 가장 대표적으로 사용되고 있습니다.'4byte'의 크기를 가지고 있으며 약 '-21억' ~ ' 21억'까지의 수가 저장가능합니다. 해당 숫자의 범위만으로도 전부처리가 가능하다는 생각을 가지실 수 있지만 더 큰 숫자를 처리해야하는 경우도 존재합니다.
'long'은 'int'에서 처리해주지 못한 범위의 숫자를 처리하기 위해 존재합니다.'8byte'의 엄청난 크기를 가지고 있으며 저장 가능 숫자의 범위는 약 '-922경' ~ '922경'입니다. 자바에서는 'int' 를 기본형으로 정하고 있어 'long' 을 사용할 때는 값뒤에 'L'을 붙여줘야 합니다.
'float'는 'int'와 크기는 같으나('4byte') 다른 저장방식으로 정수보다 더 큰 범위의 값을 저장 할 수 있습니다.실수는 정수와 달리 '부동 소수점 방식'으로 저장되며 '지수.가수F'( ex> float fnum = 3.14F')의 형태로 값을 저장할 수 있습니다.
'double'은 'long' 과 크기는 같고('8byte') 'float' 과 마찬가지로 정수보다 더 큰 범위의 값을 저장 할 수 있습니다.'double'이 'float'보다 2배정도의 용량을 가지며 비교한 결과는 다음과 같습니다.
컴퓨터의 3대요소는 '연산처리장치' 인 'CPU' 와 '메모리 공간' 에 해당하는 'RAM', 마지막으로 '키보드', '마우스'와 같은 '입력장치'가 있습니다.간단히 설명하자면 'CPU'에서 연산처리를 하게되면 메모리에 저장이되는데 이때 변수의 크기를 필요이상으로 사용하게 되면 'RAM'에서 메모리 누수가 일어나게 됩니다. 축구공은 1개인데 5개 들어가는 상자에 1개씩만 넣어 계속 창고에 저장하는 셈이죠. 이와 같은 문제를 방지하기 위해 본인이 필요한 변수의 크기를 알고 적절히 사용해야 최적화된 프로그램을 구성할 수 있게 됩니다.
'Reference' 는 'Primitive' 타입의 변수를 제외한 모든 타입을 가리키며 '참조' 라는 뜻을 지니고 있습니다. 즉, 변수가 다른 무언가를 참조하는 형태로 값을 불러오게 됩니다.조금 더 자세히 설명을 드리자면 앞서 말씀드린 'Primitive' 타입은 축구공을 상자에 직접 넣어 보관하는 방식입니다. 이에 반해 'Reference' 타입은 다른곳에 보관된 축구공의 주소를 알려주면 사용할 축구공이 있다고 말하는 것입니다. 'Reference'타입에는 'Array'(배열), 'Enumerance'(열거), 'Class'(클래스), 'Interface'(인터페이스)가 존재합니다. ('Refernce' 타입에 대한 자세한 설명은 해당 과정 설명 시 진행하도록 하겠습니다.)