안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
변수(Variable)란?
- 메모리 공간(RAM)에 한 개의 값을 기록하기 위한 공간
변수를 사용하기 위해서는 지정된 순서가 있습니다.
① 선언
② 값 대입
③ 사용(값 읽기, 출력, 연산 ...)
변수 선언 방법
자료형 변수명;
ex) int a;
값 대입 방법
변수명 = 값;
ex) a = 3;
여기서 자료형이란?
- 데이터를 저장하기 위해 생성하는 메모리 공간은 목적에 따라 크기와 특징이 다른데, 이를 자료형이라고 합니다.
자료형은 크게 2가지로 나뉩니다.
① 기본 자료형 (Primitive type)
- 실제 데이터(값)를 저장
- 각 자료형 별 데이터 저장 크기가 다름
- 데이터 구조
② 참조 자료형 (Reference type)
- 데이터가 저장되어 있는 주소를 저장(객체의 주소)
- 사용자 정의 자료형 - 4byte의 공간을 저장 공간으로 할당
- 데이터 구조
대표적인 특징을 정리해보았으며, 오늘은 기본 자료형에 대해서 자세하게 알아보려고 합니다.
기본 자료형 내에서도 크게 총 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! 자바 완전 정복을 참고하여 포스팅하였습니다.
'Java > Java' 카테고리의 다른 글
데이터 오버플로우 (Data Overflow)란? (0) | 2022.02.25 |
---|---|
상수 (Constant Variable)란? (0) | 2022.02.25 |
콘솔 출력 메서드 (println, print, printf) (0) | 2022.02.25 |
임포트(import)란? (0) | 2022.02.25 |
주석, 패키지, 클래스, main메서드란? (0) | 2022.02.24 |