티스토리 뷰
안녕하세요 오늘은 Java primitive type에 대하여 여행을 떠나볼까요?
안녕 primitive type 원시 타입!
목차
0. 특징
1. 요약
2. 타입에 대한 설명 ( int, boolean 제외)
0. 특징
primitive type은 기본적으로 not null의 특징이 있어
조금 더 안전하지 않을까(?) 생각도 됩니다.
하지만 특수한 상황에 있어 wrapper 형식이 필요할 때도 있습니다.
외부 프로그램(DB)과 연동 시 외부에서는 null을 허용할 수도 있으며
제네릭을 사용할 시 wrapper 형식이 필요합니다.
primitive type과 references type을 혼용 시에도 주의가 필요합니다.
(references type은 주소를 비교)
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 == i2);
--> result : false
(js의 원시형은 같은 값의 경우 같은 메모리 주소를 사용합니다. java에서는 잘 모르겠네요...)
int i3 = 1;
int i4 = 1;
System.out.println(i3 == i4);
--> result : true
+ boxing, unboxing을 위한 resources 가 많이 필요함
1. 요약
타입 | 메모리 사용크기 | 저장되는 값 범위 | default size | |||
byte | 1byte | -128 ~ 127 | 0 | |||
char | 2byte | 0 ~ 65,536 | \u0000 | |||
short | 2byte | -32,768 ~ 32,767 | 0 | |||
int | 4byte | -2,147,483,648(-2^31) ~ 2,147,483,647(2^31 -1) | 0 | |||
long | 8byte | -9,223,372,036,854,775,808(-2^63) ~ 9,223,372,036,854,775,807(2^63 -1) | 0L | |||
float | 4byte | 1.4E-45 ~ 3.4028235E38 | 0.0f | |||
double | 8byte | -1.7976931348623157E+308 ~ -4.9E-324 | 0.0d | |||
boolean | 1bit | false |
2. 타입에 대한 설명
1. byte
타입 이름처럼 1byte의 메모리 사용 크기를 가집니다.
8비트 256가지를 표현할 수 있으나, 음수와 양수 모두를 표현하기 위하여
최상위 비트 1개는 부호로 사용하여 2의 7승(-128) ~ 2의 7승 -1(127)을 표현 가능합니다.
-1은 0도 표현하기 때문입니다.
작업의 목적에 있어서 의미론적으로도 사용합니다.
2.char
그리고 한 개의 문자를 처리하는 데 사용됩니다. (EX 'a', 'b' )
모든 유니코드를 표현할 수 있습니다.
unicode to String(unicode 가 2byte이기 때문에 parseInt 16을 넣어줍니다.)
String hello1 = "\\u0048\\u0065\\u006C\\u006C\\u006F";
String e = hello1.replace("\\","");
String[] arr = e.split("u");
String text = "";
for(int i = 1; i < arr.length; i++){
int hexVal = Integer.parseInt(arr[i], 16);
text += (char)hexVal;
}
3.short
2byte의 사용 크기를 가지며
-32768 ~ 32767 범위의 숫자를 표현합니다.
javapoint에서는 메모리를 아끼고 싶을 때 사용할 수 있다고 합니다!
int 보다 1/2의 메모리 사용 크기를 가집니다.
다루는 데이터가 작으면 int 말고 short, byte를 써야 할까?
사용할 필요는 없고 오히려 곱셈 연산에 있어서 성능 저하가 있다고 합니다.
🐥모르겠으면 int를 사용하는 게 짜세인 것 같습니다.🐥
In java, is it more efficient to use byte or short instead of int and float instead of double?
6. long
8byte가 필요하며
int 값 범위 약 -21억 ~ 21억의 범위 밖의 수를 표현 시 사용됩니다.
7.float, double
부동소수점, IEEE 754 표준을 따르고 있습니다.(많은 곳에서 사용되는 표준)
4byte(32bit)가 필요하며
1bit 부호 비트
8bit 지수부
23bit 가수부
로 자리 잡게 됩니다.
double은
부동소수점, IEEE 754 표준을 따르고 있습니다.(많은 곳에서 사용되는 표준)
8byte(64bit)가 필요하며
1bit 부호 비트
11bit 지수부
52bit 가수부
로 자리 잡게 됩니다.
java에서는 실수 연산은 기본적으로 double을 사용합니다.
아래 두 개는 dobule, float의 연산 결과입니다.
부동소수점의 계산 방식에 있어서 가수부에 2를 무한하게 곱하는 방식이기에
근삿값으로 결과를 나타내는 단점이 있어 실제 업무에 있어 주의가 필요합니다.
java에서는 BigDecimal을 사용할 수도 있습니다.
float
double s = 0;
for(int i =0; i < 100; i++)
{
s += 0.1;
}
System.out.println(s);
---> reuslt : 9.99999999999998
double
float s2 = 0;
for(int i =0; i < 100; i++)
{
s2 += 0.1;
}
System.out.println(s2);
--> result : 10.000002
BigDecimal
BigDecimal s = new BigDecimal(0);
for(int i =0; i < 100; i++)
{
s = s.add(new BigDecimal("0.1"));
}
--> result : 10.0
☠️ new BigDecimal()의 인자로 String type을 추천합니다.
BigDecimal 생성자로 부동소수점을 사용하는 타입을 넘길 경우
이미 오차가 발생한 채로 넘어간다고 합니다. String type이 인자로 넣는 게 프로그램의 신뢰성에 도움이 된다고 봅니다.
result : 10.0000000000000005551115123125782702118158340454101562500
'Java & Kotlin' 카테고리의 다른 글
Java Arithmetic Operator (0) | 2022.07.25 |
---|---|
Java Type AutoCasting (0) | 2022.07.25 |
Java Equals, HashCode (0) | 2022.07.17 |
kotlin 기본 사용법 (0) | 2022.07.16 |
builder pattern 연습해보기 (0) | 2022.06.29 |
- Total
- Today
- Yesterday
- java8
- jre8
- 다대일
- 알고리즘
- 관계설정
- mappedby
- jvm
- 프로그래머
- 백준 제로
- 코딩테스트
- 백준
- 자사서비스
- jdk11
- 스타트업
- jre
- 백엔드
- 스택
- 백준 제로 자바
- springboot
- jre11
- Spring
- JDK8
- 문제
- JDK
- boot
- 자바
- boot 일대다
- 개발자채용
- JPA
- ㅃ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |