본문 바로가기
학교공부

[JAVA 기초] 변수와 자료형

by 자라자 2020. 9. 8.

변수

변수란 하나의 값을 저장할 수 있는 자료공간을 의미합니다. 어떤 값을 프로그램에서 사용하려고 하려면 그 값을 담을 수 있는 메모리 공간이 필요하고 그것을 변수라고 합니다. 변수는 메모리 공간안에 들어가는 값이 바뀔 수 있습니다. 그 값이 바뀌지 않을때는 상수라고 합니다.

 

변수의 사용

변수의 선언은 메모리를 할당하겠다는 것을 의미하고, 값을 입력하는 것은 그 메모리에 있던 기존 값(불필요한 쓰레기 값)을 지우고 새로운 값으로 초기화시키는 것을 의미합니다. 또 같은 종류, 같은 타입의 변수들은 나열식으로 선언이 가능합니다. 변수는 그 변수가 선언된 블록 안에서만 사용이 가능합니다. 

 

변수명 작성 규칙

변수의 첫번째 글자는 무조건 문자여야합니다.

$,_는 사용이 가능합니다.

영어 대소문자를 구분합니다.

예약어(public, void 등)는 사용할 수 없습니다.

 

리터럴

리터럴의 의미는 값입니다. 프로그램에서 쓰이는 모든 값입니다.  정수 리터럴, 실수 리터럴, 문자리터럴, 문자열 리터럴, 논리 리터럴이 있습니다. 문자열은 큰따옴표로 묶고, 문자는 작은따옴표로 묶습니다. 각 리터럴에는 아래와 같이 메모리가 할당됩니다. 음의 값을 가질 수 없는 char를 빼고는 정수 리터럴에서는 규칙성이 있습니다. boolean 타입에서는 `true`, `false`자체가 값입니다. 다른 언어처럼 1이나 0으로 할당할 수 없습니다.

값의 종류

기본타입

메모리 사용 크기

저장되는 값의 범위

정수

byte

1byte

8bit

-2^7~2^7-1 (-128~127의 정수)

char

2byte

16bit

0~2^16-1

short

2byte

16bit

-2^15~2^15-1

int

4byte

32bit

-2^31~2^31-1

long

8byte

64bit

-2^63~2^63-1

실수

float

4byte

32bit

(+/-)1.4E-45~(+/-)3.4E38

double

8byte

64bit

(+/-)4.9E-324~(+/-)1.7E308

논리

boolean

1byte

8bit

true, false

 

초과(Overload)

리터럴에서 할당할 수 있는 메모리를 초과하는 데이터를 넣으면 에러를 냅니다. byte에 150을 할당할 때와 2222222를 할당할 때의 에러메세지는 다른데요, 전자는 mismatch, 후자는 out of range 에러를 냅니다. long타입은 별도로 표시를 해줘야 하기 때문입니다. long타입과 float타입으로 변수에 값을 저장하려면 끝이 l, f를 붙여주어야 합니다. 그렇지 않으면 int타입으로 인식이 됩니다.

예를들어 `long v1`라는 변수가 있다고 할 때 `222222`라는 값을 할당하면 이는 int타입 범위 내이므로 문제가 없지만 `2222222222`의 값을 할당하면 문제가 발생합니다. `2222222222l`과 같이 l 또는 L로 구분을 해주어야 합니다.

 

 

 

문자형

자바에는 문자형을 유니코드로 처리합니다. 유니코드와 아스키코드간의 출력이 약간 헷갈렸는데 아래 페이지가 도움이 되었습니다.

kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=344855883&qb=7JWE7Iqk7YKk7L2U65OcIOycoOuLiOy9lOuTnA==&enc=utf8&section=kin&rank=1&search_sort=0&spq=0

 

자바 아스키코드, 유니코드

아스키코드는 128가지를 표현할 수 있고, 유니코드는 전 세계 언어들을 표현하기 위해서 16비트로 더 확장시켜서 만들었다. 의 개념정도는 알겠습니다. 그러나 1. 누군가 나에게 아...

kin.naver.com

영문자 같은 경우에는 아스키코드와 유니코드가 둘 다 있어서 A가 65로 출력됩니다. 반면 한글 글자 `가`를 문자 리터럴로 int형 변수에 할당하면 아스키코드값이(10진수) 출력됩니다.

 

타입 변환

큰 타입의 변수에다가 작은 타입 변수를 넣는 것은 자동적으로 변환이 됩니다. 그러나 반대의 경우 강제로 조치를 해주어야 합니다. 예를 들어 int타입을 char타입으로 변환하고 싶다면 강제 변환을 해줘야 합니다. 더불어 `실수 타입을 정수 타입으로 바꿀 때도` 데이터 크기와 상관없이 형변환을 해줘야 합니다.

형 변환시 캐스트 연산자를 쓰는데, 작은 크기의 타입을 괄호 앞에 넣어서 큰 타입 앞에 붙여주면 됩니다.

 

강제 형변환 시 주의점

정수형은 고정소수점으로 저장됩니다. 4byte를 사용한다고 하면 32비트 중 가장 왼쪽의 비트는 부호를 저장하는 데 이용이 됩니다. 반면 실수는 부동소수점으로 저장됩니다. double의 경우 8바이트, 64비트인데 가장 첫번째 비트는 부호비트, 나머지는 지수와 가수 비트로 사용됩니다. double과 float의 정밀도가 다르기 때문에 형변환시 주의해야 합니다. 또, 정수 리터럴에서 크기가 다른 데이터타입끼리 더하면 큰쪽으로 맞춰집니다.