[JAVA]기본형 변수(Primitive Type)에 대해 알아보자

Inung_92·2023년 1월 8일
0

JAVA

목록 보기
3/15
post-thumbnail

기본형 변수란?

변수(Variable)라는 프로그램이 작업을 처리하는 과정에서 데이터를 저장 할 수 있는 메모리 공간 중 기본 자료형에 대한 데이터(값)를 저장할 수 있는 공간을 의미

변수는 작업을 처리하면서 수시로 변경되는 데이터를 저장하기 위한 메모리 공간으로 데이터를 담을 수 있는 하나의 그릇이다. 변수에는 다양한 자료형의 데이터를 저장 할 수 있다. 다만, 하나의 변수에 한가지 타입의 데이터만 저장이 가능하다. 예를 들어 논리형(boolean)타입의 변수에는 정수 또는 문자형 타입의 데이터는 저장이 불가능하다.

위 그림의 코드 부분을 보면 intboolean은 변수의 자료형이고, 그 뒤의 ageflag는 변수의 이름이다. =뒤의 숫자 또는 논리값은 변수의 자료형과 동일한 형태의 데이터를 입력해주면된다. 하나의 데이터는 하나의 메모리 공간을 차지한다고 생각하면 이해에 조금은 도움이 될 것이다. 다음은 변수의 종류에 대해 알아보자.


종류

  • 변수의 종류는 기본형 변수(Primitive Type)와 참조 변수(Reference Type) 크게 두가지로 나뉨
  • 기본형 변수 : 수치형, 문자형, 논리형 3가지로 구분
  • 참조 변수 : 기본형 변수를 제외한 모든 변수

수치형

수치형 변수는 정수형실수형으로 구분된다. 아래의 표에 자세한 설명이 나와있으니 참고하기 바란다.

-정수형

형의 이름읽는 법들어가는 값의 범위사이즈(비트 수)
byte바이트-128 ~ 1278
short쇼트-32768 ~ 3276716
int인트-2147483648 ~ 21478364732
long-9223372036854775808 ~ 922337203685477580764

long형 변수에 정수를 대입할 경우 수치 뒤에 l 또는 L을 붙여서 대입
예시 : long i = 8888L;

-실수형

형의 이름읽는 법들어가는 값의 범위사이즈(비트 수)
float플로트+_3.4 x 10(38승) ~ +_1.4 x 10(-45승)32
double더블+_1.8 x 10(308승) ~ +_4.9 x 10(-324승)64

float형 변수에 실수값을 대입할 경우 수치 뒤에 f 또는 F를 붙여서 대입
예시 : float f = 4.5f;

수치형 자료에서 정수형의 기본이 되는 자료형은 int, 실수형의 기본이 되는 자료형은 double이다. 이 말은 기본이 되는 자료형보다 작은 경우에 적용이 되며, 정수형의 경우 long은 int보다 크기에 선언할 경우 long형이 되는 것이다.

아래 예시를 보자.

byte b = 127; //데이터가 byte의 범위 내에 있으므로 byte형으로 저장
byte b2 = 130; //데이터가 byte 범위 밖이므로 컴파일 에러

long a = 345342498493; //정수형의 기본인 int형의 범위를 넘으므로 컴파일 에러가 발생
long a = 345342498493L;
//이와 같이 long형으로 선언하면서 식별할 수 있는 'L' or 'l'을 명시해야함.

그렇다면 실수형은 어떤지 알아보자. 소수형은 2가지로 구분되지만 들어가는 값의 범위 즉, 소수점의 자리수가 double형이 더 크다. 이 말은 double형이 더 정밀도(Precision)가 높다는 뜻이기도하다. 이러한 이유로 실수형은 double형을 기본으로 사용한다.

아래 예시를 보자.

float f = 3.4; //기본적으로 double형으로 인식되기 때문에 컴파일 에러 발생
float f2 = 3.4f; //이와 같이 'f' or 'F'를 명시하여 float형임을 알려야함

수치형에 대해 정리를 하자면

  • 정수형의 기본자료형은 int(long형은 'L' or 'l'을 명시)
  • 실수형의 기본자료형은 double(float형은 'F' or 'f'를 명시)
  • 각 자료형의 데이터 범위를 벗어난다면 해당 자료형보다 데이터의 범위가 큰 자료형으로 변수를 선언해야함

문자형

문자형은 하나의 자료형(char)만 가지고 있다. (참고로 String 형은 기본형변수가 아닌 참조변수이기에 문자형이라 할 수 없으며 정확히는 문자열 자료형)

종류데이터형데이터사이즈표현범위
문자형char2byte'\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터)

위의 표에서 설명하듯이 문자형의 데이터 사이즈는 2byte이다. 이는 숫자와 알파벳을 포함한 세계 각국의 문자를 표현할 수 있는 문자코드체계인 유니코드의 사용으로 인한 것이다. 숫자와 특수문자, 알파벳은 1byte, 그 외 각국의 문자는 한글자당 2byte의 데이터 사이즈를 가진다. 즉, 각국의 문자를 모두 표현하기 위하여 2byte의 데이터 사이즈를 가지는 것이다. 또한, 문자형은 유일하게 unsigned 형태이다.

unsigned : 음수 없이 0부터 시작하여 양수 값만 가지는 데이터 형태

아래 예시를 보자.

char a = 'A';  //유니코드 정수형태 = 65
char b = 'B';  //유니코드 정수형태 = 66

위 처럼 문자형 변수 a, b를 선언 및 정의했다면, a>b의 비교연산자 사용이 가능하다. 컴퓨터는 사람의 문자를 인식 할 수 없기 때문에 문자를 유니코드를 기반으로 정수형태로 저장한다. 따라서 a에는 65('A'), b에는 66('B')가 저장되게된다.

//변수 선언 및 초기화
char a = 'a'; //문자형태로 저장
char a2 = 97; //아스키코드 중 'a'에 해당하는 정수형태로 저장
char a3 = '\u0061'; //유니코드 중 'a'에 해당하는 값으로 저장

위 코드에서 a, a2 ,a3는 모두 동일한 값을 표현한 변수이다.

  • 아스키코드(ASCII) : 1byte기반 문자코드체계이자 영문자 및 특수문자와 숫자 표현
  • 유니코드 : 2byte기반 문자코드체계이자 아스키코드를 포함한 전 세계 문자 표현

문자형에 대해 정리를 하자면

  • 2byte 데이터 사이즈를 가진다. 이는 전 세계 문자를 표현하기 위함이라고 생각하자.
  • Java에서 유일하게 음수없이 양수 값만 가지는 데이터 형태(unsigned)이다.

논리형

논리형은 하나의 자료형(boolean)만 가지고 있다.

종류데이터형데이터사이즈표현범위
논리형boolean1bytetrue, false

데이터를 다루는 최소 범위가 1byte 이기 때문에 낭비적이지만 1byte를 사용한다. 논리형은 참/거짓만을 나타내는 자료형이다.

//변수 선언 및 초기화
boolean t = true; //참
boolean f = false; //거짓

논리형은 추가적으로 설명할 부분이 없으니 넘어가겠다.


변수선언과 데이터(값) 저장

변수의 선언은 값을 저장하기 위한 최초의 준비라고 이해하면 된다. 아래의 예시를 보자

//기본문법
변수타입 변수_명;  //변수 선언
변수타입 변수_명 =; //변수 선언과 동시에 초기화

//int형 변수 선언
int a; //변수 선언
int a = 3; //변수 선언과 동시에 초기화

변수에는 오직 하나의 값만 저장이 가능하기 때문에 초기화에 지정된 변수의 값을 변경하고 싶을 경우 아래와 같이 변수를 재정의(대입)를 해주면 된다.

int a = 3; //변수 선언과 동시에 초기화, 현재 a에 저장된 값은 3
a = 5; //변수 재정의 또는 값 대입, 현재 a에 저장된 값은 5

변수는 선언만 할 수도 있고, 선언과 동시에 초기화로 값을 대입해 줄 수도 있다. 또한, 변수의 값을 변경하고 싶은 경우 기존에 선언된 변수를 재정의하여 값을 변경해줄 수 있다.


마무리

오늘은 변수의 종류 중 한가지인 기본형 변수(Primitive Type)에 대하여 알아보았다. 기본형 변수는 종류도 다양하고 각 종류가 표현할 수 있는 데이터의 범위와 타입이 다른만큼 외워야 할 것들이 많다. 계속 반복해서 보다보면 각 자료형의 데이터 사이즈 및 범위와 타입이 익숙해 질 것이다.

기본형 변수를 사용할 때 중요한 부분은 데이터의 범위와 사이즈를 고려하여 어떻게 선언하여 데이터(값)을 정의하여 사용할 지 고민하는 것이다. 데이터의 표현범위가 작은데 굳이 큰 자료형을 사용하여 메모리 공간을 낭비할 필요가 없다는 뜻이다. 이 부분에 대해서는 차후 JVM 메모리 구조 등에 대한 설명을 할 때 자세히 다루도록 하겠다.

profile
서핑하는 개발자🏄🏽

0개의 댓글