Link Search Menu Expand Document

원시 자료형

목차

  1. 원시 자료형이란?
  2. 숫자
  3. 문자와 논리

원시 자료형이란?

원시 자료형(Primitive Data Type)은 이름만 보면 오래되거나 구식인 것처럼 보일 수 있지만 다른 말로 ‘기본형’이다. Java에서 원시 자료형은 8가지가 있고, 각 자료형의 크기만큼 고정된 메모리 영역이 JVM의 Stack 영역에 할당된다. 원시 자료형으로 선언된 변수들은 대입한 값들을 직접 자신이 할당 받은 공간에 저장한다.

숫자

Java에는 정수실수, 두 가지 형태의 숫자 자료형이 존재한다. 우리가 흔히 알고 있는 숫자 그 자체를 저장할 수 있는 자료형이다.

정수형
이름 크기 범위
byte 1 byte -128 ~ +127
short 2 byte -32,768 ~ +32,767
int 4 byte -2,147,483,638 ~ +2,147,483,647
long 8 byte -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807

정수 자료형은 다음과 같이 4가지가 있다. 특수한 경우가 아니라면(메모리 공간을 최대한 절약하는 경우), 주로 intlong을 사용한다. 정수 자료형에 값을 대입할 때는 아래와 같이 작성하면 된다.

int myAge = 24;
long popOfEarth = 7949290310L;

long 자료형에 int 자료형의 최댓값 보다 큰 값을 대입할 때는 값 맨 뒤에 ‘L’을 꼭 붙여줘야 한다. 만약 ‘L’이 없다면 컴파일 에러가 발생한다. 이는 Java가 정수는 항상 int 자료형으로 판단하기 때문이다.

8진수와 16진수를 표현해야할 때도 있는데, Java에서는 정수형인 int 자료형을 통해 표현한다.

int octalNum = 023; //숫자 맨 앞에 0이 오면 8진수
int hexNum = 0xC; //숫자 맨 앞에 0x가 오면 16진수

실수형
이름 크기 범위
float 4 byte -3.4 × 1038 ~ 3.4 × 1038
double 8 byte -1.7 × 10308 ~ 1.7 × 10308

실수 자료형은 위의 두 가지가 전부이다. 정수와 마찬가지로 실수형의 기본 자료형double이기 때문에 float에 값을 대입할 때는 실수 맨 뒤에 ‘F’를 꼭 붙여줘야한다.

float gravityAccel = 9.8F;
double pi = 3.14159265358979323;

실수 자료형은 부동소수점 방식을 통해 보다 넓은 범위의 수를 나타낼 수 있다는 장점이 있지만, 반대로 정확한 값을 저장하지 못해 연산 시 오차가 발생한다는 단점이 있다.


문자와 논리

Java의 원시 자료형에는 숫자 자료형뿐만 아니라 문자 ‘하나’만 저장할 수 있는 문자 자료형 char와 참(True) 또는 거짓(False)만 저장할 수 있는 논리 자료형 boolean이 있다.

문자와 논리형
이름 크기 범위
char 2 byte 유니코드 문자
boolean 1 byte true 또는 false</sup>

이 두 자료형은 다음과 같이 사용할 수 있다. 이때 주의해야할 점은 char에 문자를 대입할 때는 무조건 ’‘(단일 인용부호, 작은 따옴표)를 사용해야한다는 것이다. 사실 문자 하나만 다룰 수 있기 때문에 char형은 자주 사용되는 편은 아니다.

char myGrade = 'A';
boolean isPass = true;

원시 자료형들은 당연히 연산이 가능한 자료형들이다. 기본적인 사칙 연산(+, -, *, /), 나머지 연산(%), 증감 연산(++, –), 논리 연산(AND, OR, NOT, …), 대소 비교 등, 다양한 연산들이 가능하다. 중요한 점은 이런 연산 과정에서 Java는 피연산자 스택을 활용하는데, 연산 과정에서 피연산자들을 최소 4 Bytes 단위로 저장한다는 것이다. 다시 말해 4 Bytes보다 작은 크기를 가진 자료형들은 자동으로 int형으로 자동 형 변환되어 연산된다. 당연히 4 Bytes보다 큰 자료형들은 큰 자료형 쪽으로 자동 형 변환된다.

즉, 이 코드는 오류가 발생한다. short 자료형이라고 해도 연산 과정에서 int가 되었기에 short 자료형에 값을 대입할 수 없다.

short a = 1;
short b = 2;
short result;
result = a + b; //오류 발생!

여기서 char형도 연산이 가능한지 궁금할 것이다. 문자가 연산이 된다니 이상하게 들릴 수도 있지만 문자형은 3가지 방식으로 저장이 가능하다. 문자 그 자체와, 아스키코드, 유니코드 방식으로 각각 저장이 가능하고, 덧셈과 뺄셈을 통해 특정 문자를 얻을 수 있다. 주의할 점은 char은 4 Bytes보다 작기 때문에 연산 시 int로 자동 형 변환되니 char로 강제 형 변환 작업이 추가로 필요하다.

//문자형에 값을 대입하는 세 가지 방법
//모두 'a'로 값이 동일하다.
char literalValue = 'a';
char asciiValue = 97;
char uniValue = '\u0061';