데이터 타입 | 메모리의 크기 | 특징 |
byte | 1byte | -2^7 ~ (2^7-1) (※ 2^7 = 128) |
boolean | 1byte | true, false |
char | 2byte | 문자 |
short | 2byte | -2^15 ~ (2^15-1) (※ 2^15 = 32,768) |
int | 4byte | -2^31 ~ (2^31-1) (※ 2^31 = 2,147,438,643) |
float | 4byte | ±1.40239846E-45 ~ ±3.40282347E+38, |
long | 8byte | -2^63 ~ (2^63-1) (※ 2^63 = 9,223,372,036,854,775,808) |
double | 8byte | ±4.9E-324 ~ ±1.79769313486231570E308 |
Java의 기본 데이터 표시 방식이다.
boolean이 1byte인 것은 오타가 아니다. boolean자체는 0과 1을 표현할 수 있는 1비트의 크기이지만, byte가 무엇인가. 컴퓨터가 다룰 수 있는 정보의 최소 단위아닌가. 그래서 1byte의 크기를 가진다. 이는 파이썬도 마찬가지.
그리고 정수형인 int, short, long은 1, 2, 4byte인데 이들은 ± 2^(n*8 -1) 까지 표현할 수 있다. (양수는 0도 들어가니깐 -1)
float랑 double은 실수형이다.
최적화된 메모리 사용을 위해 익혀두자. 100정도만이라면 byte로도 가능. 3만까지는 short를 사용해도 충분하고, 왠만한 숫자라면 int로 다 커버가 될 것 같다. long은 쓸 일이 있을까 할 정도로 큰 숫자가 되버린다.
속도 차원에서 접근한다면 32bit에선 int, 64bit에선 long이 짱짱일 것이다.
64bit에서 CPU의 레지스터 크기는 64bit (8byte) 이고, 이는 CPU가 한번에 처리할 수 있는 크기를 의미한다 (이를 다시 정의하면 word라고한다. 64bit에서는 64bit가 1word가 된다.). 그래서 이 크기의 데이터형을 읽을 때 가장 빠르다.
나머지 타입형들에 대해서는 시간이 날 때 실험해보겠다....
문자열은 말 그대로 문자들의 배열이다. 문자열은 String이라는 변수로 보관되며, 이는 객체이다. Java에서 모든 객체들은 heap 영역에 보관되고, 따라서 heap 영역의 크기 이상의 문자열을 가질 수 없다 (만약 넘칠 때 어떻게 되는지 실험해보고싶다.). 문자열로 몇 Gb를 다 쓰는 것은 매우매우 어렵겠지만 말이다.
참고)
Thinking Different :: 32비트에서는 char, short 대신 int 형을 써야 연산속도가 줄어든다 (tistory.com)
Program - 32비트에서는 char, short 대신 int 형을 써야 연산속도가 줄어든다 (webs.co.kr)
String 클래스의 문자열 길이의 한계 :: 자바캔(Java Can Do IT) (tistory.com)
'프로그래밍 공부 > Java' 카테고리의 다른 글
[Java.util]Optional (0) | 2021.05.26 |
---|---|
@Transactional (0) | 2021.05.25 |
[Guice] @Assisted (0) | 2021.05.21 |
Jooq란? (0) | 2021.05.20 |
[Lombok] @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor (0) | 2021.05.20 |
댓글