본문 바로가기
Java/Java

변수와 자료형의 종류, 기본 자료형이란?

by 박채니 2022. 2. 25.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


변수(Variable)란?

- 메모리 공간(RAM)에 한 개의 값을 기록하기 위한 공간

 

변수를 사용하기 위해서는 지정된 순서가 있습니다.

① 선언

② 값 대입

③ 사용(값 읽기, 출력, 연산 ...)

 

변수 선언 방법

자료형 변수명;

ex) int a;

 

값 대입 방법

변수명 = 값;

ex) a = 3;

 

여기서 자료형이란?

- 데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징이 다른데, 이를 자료형이라고 합니다.

 

자료형은 크게 2가지로 나뉩니다.

 

① 기본 자료형 (Primitive type)

  - 실제 데이터(값)를 저장 

  - 각 자료형 별 데이터 저장 크기가 다름

  - 데이터 구조

기본 자료형 데이터 구조 (stack메모리에 실제 데이터 값 저장)

② 참조 자료형 (Reference type)

  - 데이터가 저장되어 있는 주소를 저장(객체의 주소) 

  - 사용자 정의 자료형  - 4byte의 공간을 저장 공간으로 할당

  - 데이터 구조

참조 자료형 데이터 구조 (stack메모리에는 위칫값(주소값)저장 / heap메모리에는 실제 값 저장

 

대표적인 특징을 정리해보았으며, 오늘은 기본 자료형에 대해서 자세하게 알아보려고 합니다.

기본 자료형 내에서도 크게 총 4개로 나뉩니다.

 * 기본형 (Primitive Type) - 실제 값을 저장
 * - 논리형 boolean (1byte)
 * - 문자형 char (2byte)
 * - 정수형
 * 		- byte (1byte)
 * 		- short (2byte)
 * 		- int (4byte)
 * 		- long (8byte)
 * - 실수형
 * 		- float (4byte) - 유효자리수 7자리
 * 		- double (8byte) - 유효자리수 16자리
  자료형 범위 크기(byte)
논리형 boolean true, false 1byte
문자(정수) char 0 ~ 65,535 (유니코드 문자) 2byte
정수형 byte -128 ~ 127 1byte
short -32,768 ~ 32,767 2byte
int -2,147,483,648 ~ 2,147,483,647 4byte
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8byte
실수형 float ±1.4E-45 ~ 3.4E38 4byte
double ±4.9E-324 ~ 1.8E308 8byte

** 정수형의 기본형 : int // 실수형의 기본형 : double

 

** 자료형이 여러가지로 나눠진 이유 : 메모리의 효율성 때문

→ 집에 냄비가 양은냄비 1개 뿐이라고 가정해보면, 콩 하나를 쪄먹을 때도 해당 냄비로 쪄먹어야하는 공간 낭비가 발생되고

→ 아주 작은 뚝배기 1개 뿐이라고 가정해보면, 랍스타를 쪄먹을 때는 뚝배기보다 내용물이 커서 넘쳐 흐를 것

     이것이 바로 자료형이 여러가지로 나눠진 이유 

 

여기서 byte는 컴퓨터의 최소 단위인 비트가 8개 집합한 것입니다.

더보기
더보기

 * 1bit (컴퓨터의 최소 단위 / 0,1)
 * 1byte = 8 bit
 * 1kb = 1024 byte
 * 1mb = 1024 kb
 * 1gb = 1024 mb
 * 1tb = 1024 gb
 * 1pb(peta byte) = 1024 tb
 * 1eb(exa byte) = 1024 pb
 * 1zb(zetta byte) = 1024 eb
 * 1yb(yotta byte) = 1024 zb

 

그럼 각각 자료형 변수를 선언해보겠습니다. 변수를 선언하려면 변수명을 지정해야합니다.

 

그렇다면 변수명은 어떻게 지정해야할까요?

변수명은 사용자 임의대로 지정할 수 있습니다. 하지만 이 안에서는 명명 규칙이 있는데요,

 

변수 명명 규칙 (필수 / 관례적)

대소문자가 구분되며 한글 입력 가능, 길이 제한이 없다.

예약어를 사용하면 안된다. (ex. final, int, if, this, try, byte ....)

특수 문자는 _ 와 $만 사용할 수 있다.

숫자 사용은 가능하지만, 숫자로 시작해선 안된다. (1age는 불가능 / age1은 가능)

 

영어 소문자로 시작하며, 단어 2개 이상 결합 시 새로운 단어의 첫 글자는 대문자로 한다. (ex. userName, ageOfVampire...)

의미 있는 변수명을 사용하길 추천한다.

 

 

값 대입 시 아무렇게나 넣어도 되나요?

안됩니다. 반드시 해당 자료형에 맞는 범위 내에서 값을 대입해야 합니다.

public void test1() {
	// 1. 선언
	boolean bool;
	char ch;
	byte bnum;
	short snum;
	int i;
	long lnum;
	float fnum;
	double dnum;
	
	// 2. 값 대입
	bool = true;
	ch = '멍';
	ch = '냥';
	bnum = 100;
	snum = 30000;
	i = 999999999;
	lnum = 5324514234215L; //접미사 L(l)을 붙여서 long타입을 명시
	fnum = 2.234255235345f; //접미사 f(F)을 붙여서 float타입을 명시 유효자리수(모든자리수)를 넘어가면 뒤로는 보여주지 않음(틀어짐)
	dnum = 0.12341234123414314123;
	
	// 3. 사용 (값 출력)
	System.out.println(bool);
	System.out.println(ch);
	System.out.println(bnum);
	System.out.println(snum);
	System.out.println(i);
	System.out.println(lnum);
	System.out.println(fnum);
	System.out.println(dnum);
}
    
@콘솔출력값
true
냥
100
30000
999999999
5324514234215
2.2342553
0.12341234123414314

* 선언과 값 대입 동시에도 가능! (초기화)

int i = 100;

boolean bool = true;등등..

 

long과 float 뒤에는 각각 L(l) / f(F)를 붙여서 타입을 명확하게 명시해준 이유?

long자료형으로 선언 되었지만 int의 범위를 벗어났을 때 접미사(L)를 사용하지 않으면 오류가 나고,

특히 float은 범위 내에서 대입을 했어도 접미사(f)가 없으면 오류가 납니다.

 

이유는 무엇일까?

위에서 정수형과 실수형의 기본형은 각각 int와 double이라고 하였습니다.

- byte, short에 저장할 수 없는 범위의 정수 리터럴은 모두 int 자료형으로 인식합니다.

- 또는 크기에 상관없이 int, long에 정수 리터럴을 입력할 때도 int자료형으로 인식하므로 long을 나타내는 L을 붙여줍니다.

 

- float도 동일하게 자바는 실수 리터럴을 double 자료형으로 인식하므로 float을 나타내는 f을 붙여줍니다.

 

float과 double의 유효 자리수란?

유효 자리수(모든 자리수) 내에서는 정확하게 값을 출력해주고, 그 이후는 틀어지거나 안 보일 수 있다는 것입니다.

따라서 fnum에 2.234255235345f 을 대입하였지만 실제 출력 값은 2.2342553 인 것입니다. 

 

 

 

 

 

Do it! 자바 완전 정복을 참고하여 포스팅하였습니다.