1. 변수 - (1) 자료형

한승록·2023년 3월 16일
0

자바 기초

목록 보기
1/21
post-thumbnail
java를 비롯한 모든 프로그램 언어에서 가장 중요한 개념이'변수(variable)'라고 생각합니다.

변수는 단어 그대로 '변하는 수'라는 뜻을 내포하고 있습니다.
변하는 수라는 개념이 너무 추상적이시라면 변수라는 공간에 물건을 넣어준다면 기존의 물건이 새로운 물건으로 변경된다고 생각하시면 좋을 것 같습니다.

(상자에 축구공이 들어있는데 농구공을 집어넣었더니 축구공은 사라지고 농구공만 남게 되는것이죠.)

그런데 여기서 축구공이든 농구공이든 넣을 수 있는 공간이 먼저 필요하다는 사실을 눈치채셨을 겁니다. 이러한 공간을 생성하는 것을 '변수 선언'이라고 부릅니다.

앞선 시리즈에서 진행했던 이클립스 사용 테스트 문구를 인용하여 설명을 드려보겠습니다.

public static void main(String[] args) {
	String str = ("Hello, world");
    // <형태>
    // 자료형 변수이름;
    // (또는)
    // 자료형 변수이름 = 저장할 값;
}
해당 코드를 작성하시게 되면 'str'이라는 "Hello, world"라는 문자열을 담을 수 있는 공간이 생성이 되는 것이죠.

그리고 해당 공간에 "Hello, world"라는 초기값을 저장하는 것을 '변수 초기화'라고 합니다.


해당 작업 수행 시 값을 저장은 무작위 값을 넣어도 가능할까요?

정답은 '불가능!!'하다 입니다.

변수에도 각각의 유형과 크기가 있으며 해당 유형과 동일한 값을 넣어줘야 하는데 이러한 유형을 '자료형'이라고 합니다.

'자료형'은 'Primitive Type''Reference Type'으로 나누어집니다.
기본적인 형태의 자료형은 'Primitive Type'으로 변수에 직접 데이터를 저장하는 기능을 가지고 있습니다. (아래의 코드는 'Primitive 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배정도의 용량을 가지며 비교한 결과는 다음과 같습니다.


그렇다면 이쯤에서 이러한 의문점이 생기실 수 있습니다.

"어차피 'long'과 'double'이 제일 크기가 크다면 애시당초 해당 변수들을 사용하면 되지 않을까?"

해당 의문점은 컴퓨터 연산처리 방식에 대해 이해가 필요합니다.
컴퓨터의 3대요소는 '연산처리장치' 'CPU''메모리 공간' 에 해당하는 'RAM', 마지막으로 '키보드', '마우스'와 같은 '입력장치'가 있습니다.
간단히 설명하자면 'CPU'에서 연산처리를 하게되면 메모리에 저장이되는데 이때 변수의 크기를 필요이상으로 사용하게 되면 'RAM'에서 메모리 누수가 일어나게 됩니다. 축구공은 1개인데 5개 들어가는 상자에 1개씩만 넣어 계속 창고에 저장하는 셈이죠.

이와 같은 문제를 방지하기 위해 본인이 필요한 변수의 크기를 알고 적절히 사용해야 최적화된 프로그램을 구성할 수 있게 됩니다.


다음은 'Reference' 타입에 대해 설명드리겠습니다.

'Reference' 는 'Primitive' 타입의 변수를 제외한 모든 타입을 가리키며 '참조' 라는 뜻을 지니고 있습니다. 즉, 변수가 다른 무언가를 참조하는 형태로 값을 불러오게 됩니다.
조금 더 자세히 설명을 드리자면 앞서 말씀드린 'Primitive' 타입은 축구공을 상자에 직접 넣어 보관하는 방식입니다. 이에 반해 'Reference' 타입은 다른곳에 보관된 축구공의 주소를 알려주면 사용할 축구공이 있다고 말하는 것입니다.

'Reference'타입에는 'Array'(배열), 'Enumerance'(열거), 'Class'(클래스), 'Interface'(인터페이스)가 존재합니다.

('Refernce' 타입에 대한 자세한 설명은 해당 과정 설명 시 진행하도록 하겠습니다.)
profile
개발 학습

0개의 댓글