일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 구현
- greedy
- Binary Search
- java
- Class
- Matrix
- Data Structure
- array
- string
- Number Theory
- simulation
- Math
- SQL
- hash table
- Tree
- bit manipulation
- Stack
- Method
- dynamic programming
- two pointers
- geometry
- Binary Tree
- database
- 코딩테스트
- sorting
- implement
- Counting
- 파이썬
- 자바
- 코테
- Today
- Total
코린이의 소소한 공부노트
변수의 데이터 타입(data type) 본문
변수에는 임의의 값 하나가 들어갈 수 있는데, 이 값이 무엇이냐에 따라 변수의 타입이 결정된다.
자바에서는 크게 기본형과 참조형 두 가지로 나눈다.
1. 기본형(primivtive type)
- 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)의 8개 타입을 기본형으로 분류한다.
- 변수에 넣을 실제 값을 저장한다.
- 타입에 따라 변수의 크기가 다르다.
- 자바 설계 시 정해놓은 것이기 때문에 기본형은 8개에서 추가될 수 없다.
2. 참조형(reference type)
- 기본형을 제외한 나머지 타입들(String, System 등)을 참조형으로 분류한다.
- 객체의 주소를 저장한다.(4 byte의 경우 0x00000000~0xffffffff)
- 모든 참조형 변수의 크기는 4 byte(=32 bit) 또는 8 byte(=64 bit)로 동일하다.
ㄱ) 32 bit JVM(자바 버추얼 머신)
- 32 bit로 표현 가능한 숫자는 약 40억 -> 참조 주소가 40억 개 -> 다룰 수 있는 메모리가 40억 byte = 4GB
ㄴ) 64 bit JVM
- 64 bit로 표현 가능한 숫자는 약 1800경 -> 참조 주소가 1800 경개 -> 다룰 수 있는 메모리가 약 1800만TB
- 우리가 마음대로 추가할 수 있다.
여기서 나오는 bit와 byte는 데이터의 단위이다.
1) bit
- 가장 작은 데이터 단위
- 컴퓨터는 2진법을 사용하기 때문에 1 bit로 0과 1의 2가지만 표현 가능
2) byte
- 8개의 bit가 모여서 생기는 단위
- (8 bit) * (1 bit당 2가지 표현) = 2의 8제곱인 256개의 수 표현 가능
기본형과 참조형 중 기본형 8가지를 조금 더 자세히 다뤄보겠다.
1) 논리형: boolean
- 참(true)과 거짓(false)의 논리값이 저장되는 타입
- 조건식, 논리 계산식에 사용됨
2) 문자형: char
- 'a', 'A' 등 문자 1개를 저장할 수 있는 타입
- 여러 개의 문자를 저장하려면 참조형 변수인 String 사용
3) 정수형: byte, short, int, long
- 정수 1개의 값을 저장할 수 있는 타입
ㄱ) byte
- 이진 데이터(이미지 파일 등)를 다루는 데 사용되는 타입
ㄴ) short
- C언어와의 호환을 위해 추가된 타입(잘 쓰지 않음)
ㄷ) int
- 정수형의 default 타입(정수형 중 가장 많이 쓰임)
ㄹ) long
- int보다 더 큰 수를 다룰 때 쓰는 타입
4) 실수형: float, double
- 실수 1개의 값을 저장할 수 있는 타입
- 수학에서 보면 정수는 실수에 포함되므로 당연히 정수를 실수형에 저장 가능하나, 표현 방식에 차이가 생김
- 1은 정수형에 저장하면 1이지만, 실수형에 저장하면 1.0이 됨
ㄱ) float
- 실수를 부동 소수점(floating point)방식으로 저장해서 이름이 float으로 붙여짐
ㄴ) double
- 실수형의 default 타입
- float보다 2배의 정밀도를 갖기 때문에 이름이 double으로 붙여짐
- 숫자가 작아도 정밀도가 중요하면 double 사용 >> 이것이 double이 default type인 이유!
기본형의 저장공간과 표현 가능 범위를 비숫자형과 숫자형으로 나눠서 설명하겠다.
1. 비숫자형(unsigned)
1) 논리형: boolean
- 저장공간: 1 byte
- 자바에서 데이터를 다루는 최소 단위가 byte이기 때문에, 1 bit를 사용해도 충분한 것을 1 byte로 나타냄
- true, false 2가지만 저장 가능
2) 문자형: char
- 저장공간: 2 byte
- 자바에서 2 byte 문자 체계인 유니코드를 쓰기 때문에 char의 크기가 2 byte가 됨
- 16 bit로 표현 가능한 수는 2의 16제곱인 65,536개 >> 0부터 65,536-1 = 65,535까지 표현 가능
2. 숫자형 - 정수형(signed, S는 부호 비트로 0은 양수, 1은 음수를 뜻함)
1) byte
- 저장공간: 1 byte (크기가 1 byte이기 때문에 이름이 byte로 붙여짐)
- 7 bit로 표현 가능한 수는 2의 7제곱인 128개 >> -128부터 127까지 표현 가능
2) short
- 저장공간: 2 byte (int를 기준으로 더 짧아서 이름이 short으로 붙여짐)
- 15 bit로 표현 가능한 수는 2의 15제곱인 32,768개 >> -32,768부터 32,767까지 표현 가능
3) int
- 저장공간: 4 byte
- 31 bit로 표현 가능한 수는 2의 31제곱인 21억개 >> -21억부터 21억까지 표현 가능
(외우기 편하게 2^10≒1000으로 하고, 2^30 = 2 * (2^10)^3 ≒ 2 * 10^9 = 20억으로 간주해서 -20억부터 20억까지로 간편하게 계산)
4) long
- 저장공간: 8 byte (int를 기준으로 더 길어서 이름이 long으로 붙여짐)
- 63 bit로 표현 가능한 수는 2의 63제곱인 922경 >> -922경부터 922경까지 표현 가능
(2^63 = 2^3 * (2^10)^6 ≒ 8 * 10^18 = 800경으로 간주해서 -800경부터 800경까지로 간편하게 계산)
3. 숫자형 - 실수형(signed)
1) float
- 저장공간: 4 byte
- 표현 가능 범위: 음수는 -3.4E38부터 -1.4E45까지, 양수는 1.4E45부터 3.4E38까지
-1.4E45부터 1.4E45 사이의 수는 표현 불가
(3.4E38 = 3.4e38 = 3.4 * 10^38)
- 정밀도(오차 없는 자리 수 = 유효숫자): 7
2) double
- 저장공간: 8 byte
- 표현 가능 범위: 음수는 -1.8E308부터 -4.9E324까지, 양수는 4.9E324부터 1.8E308까지
-4.9E324부터 4.9E324 사이의 수는 표현 불가
- 정밀도: 15
기본형 8가지를 비숫자형과 숫자형의 두 부류로 나눈 기준은 부호의 유무이다.
boolean이나 char는 부호가 필요 없는 unsigned 타입이지만, 정수형이나 실수형은 음수도 나타내야 하므로 부호가 필요한 signed 타입이다. 이것은 표현 가능한 최댓값과 최솟값에 굉장한 차이를 나타낸다.
예를 들어, 4 bit로 표현 가능한 부호 없는 수의 가짓수는 2의 4제곱인 16가지이고, 이는 0부터 2^4-1=15까지이다.
그런데 부호가 1 bit를 차지하면, 표현 가능한 가짓수는 2의 3제곱인 8가지로 줄어들게 된다. 그래서 부호 없는 수는 0부터 7(2^3 -1)까지, 부호 있는 수는 -8(-2^3)부터 -1까지 표현하게 되는 것이다.
그래서 같은 n bit수의 unsigned 변수와 signed 변수가 있어도 표현할 수 있는 범위는 각각 0부터 2^n -1까지, -2^(n-1)부터 2^(n-1) -1로 다르다. 기본형 중에서는 char와 short을 비교해보면 된다.
'Java' 카테고리의 다른 글
문자와 문자열 (0) | 2021.12.08 |
---|---|
변수와 리터럴의 타입 일치/불일치 (0) | 2021.12.08 |
변수, 상수(constant), 리터럴(literal), 접미사 (0) | 2021.12.07 |
변수 선언 & 명명 규칙 (0) | 2021.12.06 |
변수(variable) (0) | 2021.12.03 |