※ 포스팅에서 사용된 그림 등을 퍼가시거나 기타 자료로 활용 하셔도 괜찮지만, 출처 표기 부탁 드립니다.
자바의 기본형 변수, 비트와 바이트, 자바 메모리(Java Data Type, Primitive Type, bit, byte, Java Memory Stack/Heap/Static)
자바에서의 자료형은 아래 그림과 같이 기본형(Primitive Type) 변수와 참조형(Reference Type) 변수로 나눠지는데, 이번 포스팅에서는 기본형 변수에 대해 다룹니다.
A. 기본형 변수의 특징1 - 고정된 데이터 크기(byte)를 가지고 있음
B. 비트(bit)와 바이트(byte)의 이해
위의 그림에서 바이트는 자료형의 크기를 의미하게 되며 이를 이해하기 위해서는 비트(bit)와 바이트(byte)를 이해할 필요가 있습니다.
- 비트(bit) : 비트는 컴퓨터에서 데이터를 표현하기 위한 최소한의 단위로써 0과 1로 이루어져 있습니다.
- 바이트(byte) : 1byte는 8개의 bit가 모아진 형태를 의미 하며 16bit는 8byte가 됩니다
즉 1byte가 숫자로 표현할 수 있는 범위는 0~255 이며, 표현 범위 가능한 개수는 256개 입니다. (0이 포함되므로)
아래와 같이 2의 n승이 올라가는 방향으로 움직일수록 표현할 수 있는 숫자가 많아집니다.
2의 0승 | |
데이터 표현 범위 | 0 |
1 |
2의 1승 | ||
데이터 표현 범위 | 0 | 0 |
0 | 1 | |
1 | 0 | |
1 | 1 |
2의 2승 | |||
데이터 표현 범위 | 0 | 0 | 0 |
0 | 0 | 1 | |
0 | 1 | 0 | |
0 | 1 | 1 | |
1 | 0 | 0 | |
1 | 0 | 1 | |
1 | 1 | 0 | |
1 | 1 | 1 |
각각의 데이터는 2의 n승으로 계산할 필요 없이 아래와 같이 위에는 비트 자리를, 아래는 숫자를 128 ~ 1까지 적어놓으면 편하게 계산할 수 있습니다. 비트에 있는 자리가 1이 오르면, 아래에 있는 숫자를 더하면 됩니다.
만약, 아래와 같이 비트가 01010011로 표현 된다면 64+16+2+1의 값인 83이 됩니다.
11001010으로 표현 된다면 128+64+8+2의 값인 202가 됩니다.
C. 자료형의 메모리 크기와 기본값, 표현 범위
다시 자료형의 이야기로 돌아가서 각각의 자료형은 아래와 같은 크기와 값, 표현 범위를 갖게 되는데 정수형의 예약어인 byte는 1byte의 크기를 가지므로 표현 가능한 개수는 256개지만, 음수를 표현하므로 0~255가 아니라 -128~127이 됩니다.
이와 같이 각각 몇 바이트의 크기를 가지고 있느냐에 따라 표현 범위가 달라지게 되고, 변수가 선언 되면서 각자 가지고 있는 데이터 크기 만큼의 메모리 영역을 확보하게 됩니다. (https://nirsa.tistory.com/377 - 2.변수 선언 그림 참고)
특이하게도 논리형 boolean의 경우 1byte임에도 표현 범위는 true / false 단 2개 입니다. 0 또는 1 두가지로 true / false를 나타낼 수 있을 것 같은데, boolean이 1byte를 사용하는 이유는 CPU가 메모리에 접근할 수 있는 최소 단위가 1byte이기 때문에 1bit가 아닌 1byte를 사용 합니다.
D. 기본형 변수의 특징2 - Stack 영역에 값을 직접 저장
기본형 변수의 또 다른 특징으로는 자바 메모리 영역에서 Stack에 직접 값을 저장하고 사용 합니다. 이후 포스팅할 참조형 변수의 경우 Stack에 참조할 주소를 저장 하지만, 기본형 변수는 값을 직접 저장 하게 됩니다.
E. 자바의 메모리 구조 참고 (PC Register, Native Method 제외)
'Programming > JAVA' 카테고리의 다른 글
[JAVA 변수 강의-2] 자바 변수명 네이밍 규칙(Java Naming Convention) (0) | 2023.07.17 |
---|---|
[JAVA 변수 강의-1] 자바 변수, 선언, 초기화 (Java Variables, Declaration, Initialization) (0) | 2023.07.17 |
[JAVA] STS GitHub 연동 (0) | 2022.07.11 |
[JAVA] 자바 예외 처리 (Java Exception) (0) | 2022.05.24 |
[JAVA] 자바 HashMap Null이 아닌 값 꺼내기 (0) | 2022.05.20 |