Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 안드로이드
- groupby
- 안드로이드스튜디오
- doitandroid
- 혼공파
- Kotlin
- 프로그래머스
- Android
- SQL
- 알고리즘
- 코틀린
- 기술면접
- select
- CS
- join
- 자바
- 혼공챌린지
- 티스토리챌린지
- java
- Til
- 정보처리기사
- MySQL
- 혼공단
- 인프런
- 스터디
- 자료구조
- 오블완
- 코테
- 정처기
- 카카오코테
Archives
- Today
- Total
Welcome! Everything is fine.
[JAVA] 자동 타입 변환, 강제 타입 변환 본문
728x90
📌 타입 변환
- 타입 변환 : 데이터 타입을 다른 데이터 타입으로 변환하는 것.
- 자동(묵시적) 타입 변환
- 강제(명시적) 타입 변환
📌 자동 타입 변환(Promotion)
- 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것.
- 큰 크기 타입 = 작은 크기 타입 → 자동 타입 변환
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환이 일어남.
int intValue = 200;
double doubleValue = intValue; // 200.0
char charValue = 'A';
int intValue = charValue; // 65가 저장됨.
단, 음수가 저장될 수 있는 byte 타입을 char 타입으로 자동 변환 시킬 수 없다.
byte byteValue = 65;
char charValue = byteValue; // 에러
char charData = (char)byteValue; // 강제 타입 변환
📌 강제 타입 변환(Casting)
- 지동 타입 변환이 안돼서 강제적으로 타입 변환하는 것.
- 작은 크기 타입 = (작은 크기 타입) 큰 크기 타입 → 강제 타입 변환
- 강제 타입 변환이 되더라도 값은 보존 되도록 하는 것이 중요
int intValue = 103029770;
byte byteValue = (byte)intValue; // 강제 타입 변환, 기존 값 보존X
long longValue = 300;
int intValue = (int)longValue; // 기존 값 보존O
double doubleValue = 3.14;
int intValue = (int)doubleValue; // 정수 부분인 3만 저장
- 변환으로 인한 데이터 손실 주의
아래 예시와 같이 강제 타입 변환 전에 값이 안전하게 보존될 수 있는지 검사하는 것이 좋다. 자바는 데이터 값을 검사하기 위해 boolean과 char 타입을 제외한 모든 기본 타입에 대해 최대값(max)과 최소값(min)을 상수로 제공한다.
i = 127;
if(i < Byte.MIN_VALUE || i > Byte.MAX_VALUE) {
System.out.println("byte 타입으로 변환할 수 없습니다.");
System.out.println("값을 다시 확인해주세요.");
} else {
byte b = (byte) i;
System.out.println(b);
}
기본타입 | 최소값 상수 | 최대값 상수 |
byte | Byte.MAX_VALUE | Byte.MIN_VALUE |
short | Short.MAX_VALUE | Short.MIN_VALUE |
int | Integer.MAX_VALUE | Integer.MIN_VALUE |
long | Long.MAX_VALUE | Long.MIN_VALUE |
float | Float.MAX_VALUE | Float.MIN_VALUE |
double | Double.MAX_VALUE | Double.MIN_VALUE |
- 정수 타입을 실수 타입으로 변환할 때 정밀도 손실 피하기
int num1 = 123456780;
int num2 = 123456780;
float num3 = num2;
num2 = (int) num3;
int result = num1 - num2;
System.out.println(result); // 0이 아니라 -4가 출력됨.(정밀도 손실)
int num1 = 123456780;
int num2 = 123456780;
Double num3 = num2;
num2 = (int) num3;
int result = num1 - num2;
System.out.println(result); // 0이 출력됨.
📌 연산식에서의 자동 타입 변환
- 연산은 같은 타입의 피 연산자간에만 수행되기 때문에 서로 다른 타입의 피연산자는 같은 타입에 크기가 더 큰 타입으로 변환된다.
아래 코드에서, int타입으로 꼭 연산을 해야한다면 double타입을 int타입으로 강제 변환 한 후 연산을 수행하면 된다.
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // intValue가 double값으로 변환, resul는 15.5
- 자바는 정수 연산일 경우 int타입을 기본으로 한다.
char ai = 'A';
int result = ai + 1; // 'A'의 유니코드보다 1이 큰 유니코드가 저장
char na = (char) result; // 'B'가 저장
'자격증 및 기타 활동 > J2KB' 카테고리의 다른 글
[Java] JDK, JRE, JVM이란? (0) | 2022.02.06 |
---|---|
[Java] 접근지정자 (0) | 2021.10.23 |
[4-3] 컬렉션 프레임워크 - ArrayList ~ Stack, Queue, HashSet (0) | 2021.09.04 |
[4-2] 제네릭 프로그래밍 ~ 컬렉션 프레임워크 (0) | 2021.09.02 |
[4-1] 인터페이스 활용하기(3) ~ 기본 클래스(2) (0) | 2021.09.01 |