변수란?
RAM에 데이터를 저장하기 위해 할당받은 메모리 공간
우리는 이 데이터 타입을 명시하면서, 컴퓨터에게 어떻게 데이터를 저장하고 처리할 지 암시해준다
이 데이터 타입은 크게 기본형과 참조형으로 나뉜다.
(1) 기본형(primitive type) : 실제값을 저장한다. 모든 값 타입은 스택(stack)에 저장된다
비객체 타입이므로 null 값을 가질 수 없다 (기본값이 정해져 있음)
기본형 타입
정수형 byte short int long
실수형 float double
논리형 boolean
문자형 char
메모리의 크기
8bit(비트) 1byte
1024byte 1kilobyte
1024kilobyte 1megabyte
1024megabyte 1gigabyte
1024 gigabyte 1terabyte
컴퓨터에 저장되는 정보의 가장 작은 단위는 1bit이다.
1bit는 0이나 1의 값의 가질 수 있다.
byte는 bit 보다 8배 큰 단위다.
정수형 타입
🔍 각 변수가 소모하는 메모리의 양은 같다? 다르다?
long a = 2147483647;
long b = 1;
변수 a와 b가 컴퓨터에서 소모하는 메모리의 양은?
서로 같습니다.
왜냐하면 데이터 타입이 중요하기 때문에
이 변수가 가리키는 데이터 값이 크나 작냐가 중요한 것이 아니라,
이 변수가 어떤 데이터 타입을 가지고 있느냐가 결국, 컴퓨터에서 사용하는 메모리의 양을 결정한다
(8byte 공간을 미리 확보해놓는 것, 공간의 일부를 쓰던, 다쓰던 소모되는 메모리는 같다)
int c = 2147483647; (4byte 공간 확보)
long d = 2147483647; (8byte 공간 확보)
위의 변수 c, d는 같은 숫자를 가리키고 있음에도 불구하고,
a가 b보다 더 적은 메모리를 사용합니다.
결과적으로 말해서 정수를 저장할때는 int를 사용하면 된다.
int 형을 처리할때, CPU 처리속도가 빠르고, int는 충분히 큰 수를 표현할 수 있는 데이터 타입이기 때문이다
🔍 short를 쓸 것인가 int를 쓸 것인가? 정수 자료형 선택 기준
- CPU는 int형 데이터 크기만 연산 가능하다.
- short형을 쓴다면, 연산 직전에 short 형 => int 형 으로 자동 변환되어져 연산 수행이 느려진다.
- 일반적으로 정수표현시 int형 자료형을 선택하는 것을 권장한다
실수형 타입
자바에서 실수형은 부동소수점 방식으로 저장한다.
따라서, 근삿값이므로 오차가 발생할 수 있다는 단점이 있으니 각 타입의 ‘정밀도’를 고려해야 한다.
실수형은 float와 double 이 있다. double을 사용하는 것을 권장한다
🔍 그런데 실수를 사용할때는 double을 사용하는 걸 권장하는 이유가 뭘까?
double이 더 높은 정밀도를 가지고 있기 때문이다.
🔍 금융거래와 같이 아주 정확한 값이 필요한 경우에는 실수형을 사용하지 않고, 다른 방법을 강구해야 한다.
흔히 float나 double 연산 시 오차가 발생하여 숫자에 민감한 금융거래 등에서 BigDecimal 라이브러리를 사용해야 한다.
실수 계산 오차가 생기는 이유 : 부동소수점 방식으로 반올림해서 !!!
사실은 0.1과 0.2가 각각 0.1와 0.2가 아니기 때문이다!!!
=> 이진법에서는 0.1이 무한소수가 된다는 것!!
9.625 => 이진수 1001.101 (딱 떨어지게 표현됨)
9 = 1001
0.6 = 0.101
0.1 => 이진수 0.0001100110011…. (딱 떨어지지 않음)
0.1에 가까워질 뿐, 맞아 떨어지지는 않음을 알 수 있다
특정 자릿값에서 반올림 하는 즉시, 0.1보다는 큰 값이 되어버리고 실제와는 다른 결과가 나오게 된다
고정소수점 vs 부동소수점(Floating point, => 소수점이 떠서 움직인다?)
1) 고정소수점
부호 비트는 0이면 양수, 1이면 음수를 나타내고,
앞의 15bits는 정수부분에, 뒤의 16bits는 소수부분에 할당함
단점: 정수부분에는 큰 숫자를 할당할 수 없고, 소수부분에도 정밀한 값을 표현할 수 없음
2)부동소수점
컴퓨터에서 소수점 이하(실수)의 값을 표현하고 연산하는 방식, 이진수 체계 사용, 부호비트 + 지수부분 +가수부분으로 구성
7.625 라는 실수가 있다면, 111.101(2)로 표현됨
이 값의 맨 왼쪽에 있는 1을 두고, 나머지 값을 소수점으로 옮긴 뒤 2^n으로 표현한다
지수비트의 표현: 지수로 표현된 2^n 값에 지수(n)값에 bias(127)이라는 값을 추가하여 2진수 값을 표현
가수비트의 표현: 소수점으로 옮긴 값을 표현
단점: 가수부분의 비트 수가 정해져 있기 때문에, 근사치의 값이 나온다 (완벽히 정밀한 것은 아님)
(2) 참조형 (reference type): 기본형과 달리 실제 값이 저장X , 자료가 저장된 공간(객체)의 주소를 저장한다
즉, 실제 값은 다른 곳에 있으며, 다른 곳에 있는 주소를 참조해서 그 값을 가져온다.
메모리 안에서 변수와 주소값은 stack에 저장하고, 실제 값은 heap에 저장한다.
참조형 타입
기본 제공 클래스, 프로그래머가 만든 클래스, 배열, 열거 타입
'Java' 카테고리의 다른 글
자바 별찍기 - 마름모 만들기 (0) | 2023.08.18 |
---|---|
스캐너(Scanner) : java의 입력기능 (0) | 2023.08.13 |
Java 형변환 - 자동 형변환 vs 명시적 형변환 (0) | 2023.08.11 |
Java 상수형 데이터 타입 (0) | 2023.08.11 |
이중반복문 : 별 찍기 (2) | 2023.08.06 |