| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 자바자료구조
- 코딩독학방법
- 자료구조강의추천
- 데이터베이스기초
- 안드로이드
- 오류제어
- 데이터베이스강의
- RFC
- CodeLatte
- 개발자
- 자바
- Android
- java
- 코드라떼
- 람다
- 코딩입문
- CodeCommit
- 백엔드 개발 코딩 강의
- thread
- 정규식
- 스트림
- 백엔드 코딩
- 문돌이
- Stream
- 스타트업
- 백엔드 강의
- lamda
- C포인터
- 자바8
- java8
- Today
- Total
이병록의 개발 블로그
[코드라떼] 자바 프로그래밍 - 형 변환 본문
목차
ㅤ
1. 형 변환
형 변환은 기존의 자료형에서 다른 자료형으로 변환하는 것을 형 변환이라고 합니다.
byte a = 32;
// 1 byte로 저장된 값을 2 byte로 변환
short b = a;
이러한 형 변환에는 암시적 형 변환(Implicit Conversion)과 명시적 형 변환(Explicit Conversion)이 있습니다.
ㅤ
1-1. 암시적 형 변환(Implicit Convercion)
암시적 형 변환은 직접 형 변환 접두사(구문)을 사용하지 않아도 자동적으로 형 변환되는 것을 말합니다.
정수의 암시적 형 변환
byte a = 32;
// 1 byte로 저장된 값을 2 byte로 변환
short b = a;
// 2 byte로 저장된 값을 4 byte로 변환
int c = b;
// 4 byte로 저장된 값을 8 byte로 변환
long d = c;
더 큰 범위의 자료형으로 변환하기 때문에 표현할 수 있는 값의 범위에 대한 제약이 없습니다.
실수의 암시적 형 변환
float a = 1.12F;
// 단정도(4byte)로 저장된 부동소수점을 배정도(8 byte)로 변환
double b = a;
자료형과 암시적 형 변환의 규칙

암시적 형 변환은 메모리 공간 크기를 기준으로 변환하지 않고 값의 표현 범위를 기준으로 변환됩니다. 정수만 표현할 수 있는 것 보단 정수와 실수를 둘다 표현 가능 한 것이 값의 표현 범위가 더 넓습니다.
그리고 실제로 단정도(4 byte) float는 int (4 byte) 보다 더 큰 정수를 표현할 수 있습니다.
ㅤ
1-2. 명시적 형 변환(Explicit Convercion)
암시적 형 변환은 직접 형 변환 접두사(구문)을 사용하지 않아도 자동적으로 형 변환되는 것을 말합니다. 명시적 형 변환은 데이터의 손실이 발생할 수 있다는 것을 인지하고 형 변환을 한다고 명시하는 것이기 때문에 명시적 형 변환이라고 합니다. 예시로 8 byte로 표현되는 1000억의 리터럴 값이 4 byte로 표현을 하려고 하면 데이터의 변질이 발생합니다.
명시적 형 변환 구문
[자료형] [변수명] = (자료형) [변수명 또는 리터럴];
int a = (int) 100000000000L;
long b = 1000;
int a = (int) b;
정수의 명시적 형 변환
long a = 100000;
// 8 byte로 저장된 값을 4 byte로 변환
// 다만 100000은 4 byte로 표현이 가능하기 때문에 손실이 없음
int b = (int) a;
// 4 byte로 저장된 값을 2 byte로 변환
// 다만 100000은 2 byte로 표현할 수 없기 때문에 데이터 손실 및 변질
short c = (short) b;
실수의 명시적 형 변환
double a = 1.42;
// 배정도(8byte)로 저장된 부동소수점을 단정도(4 byte)로 변환
float b = (float)a;
정수에서 실수로 명시적 형 변환
float a = 32.123F;
// 단정도(4 byte) 부동소수점을 정수로 변환
int b = (int)a;
// 변수 b에 실제로 저장된 값 : 32
정수에서 실수로 명시적 형 변환을 할 경우 int로 표현할 수 있는 정수의 범위를 넘지 않는 이상 일반적으론 정수부만 추출합니다. 그러나 표현할 수 있는 정수의 범위를 넘으면 데이터가 변질됩니다.
정수에서 실수로 명시적 형 변환(변질)
float a = 10000000000.0F;
// 단정도(4 byte) 부동소수점을 정수로 변환
int b = (int)a;
// 변수 b에 실제로 저장된 값 : 2147483647
a 변수는 int로 표현할 수 있는 정수의 값의 범위를 넘었기 때문에 int로 표현할 수 있는 최대 값인 2147483647를 저장합니다. 그러므로 데이터가 변질될 수 있을 가능성을 염두에 두어야 합니다.
ㅤ
1-3. 연산시 형 변환
연산 과정에서도 형 변환이 발생할 수 있습니다.

기본적으로 정수형 끼리의 산술 연산은 4 byte로 암시적 형 변환을 한 후 계산을 합니다.

정수와 실수의 산술 연산은 실수형으로 암시적 형 변환을 합니다. 실수의 값의 표현 범위가 더 넓기 때문입니다.
ㅤ
2. [실습해보기] 형 변환을 느껴보자
실습도구에 해당 코드를 작성해 봅시다
ㅤ
2-1. 정수의 암시적 형 변환
ㅤ
2-1-1. byte -> short
코드 작성
byte byteNum = 32;
short shortNum = byteNum;
System.out.println(shortNum);
출력
32
ㅤ
2-1-2. short -> int
코드 작성
short shortNum = 10000;
int intNum = shortNum;
System.out.println(intNum);
출력
10000
ㅤ
2-1-3. short -> long
코드 작성
short shortNum = 10000;
long longNum = shortNum;
System.out.println(longNum);
출력
10000
ㅤ
2-1-4. int -> double
코드 작성
int intNum = 26;
double doubleNum = intNum;
System.out.println(doubleNum);
출력
26.0
ㅤ
2-2. 정수의 명시적 형 변환
ㅤ
2-2-1. long -> int (무손실)
코드 작성
long longNum = 12345678;
int intNum = (int)longNum;
System.out.println(intNum);
출력
12345678
ㅤ
2-2-2. long -> int (손실 및 변질 발생)
코드 작성
long longNum = 10000000000L;
int intNum = (int)longNum;
System.out.println(intNum);
출력
1410065408
ㅤ
2-3. 실수의 암시적 형 변환
ㅤ
2-3-1. float -> double
코드 작성
float floatNum = 10.321F;
double doubleNum = floatNum;
System.out.println(doubleNum);
출력
10.321000099182129
ㅤ
2-4. 실수의 명시적 형 변환
ㅤ
2-4-1. double -> float
코드 작성
double doubleNum = 32.1234567891234;
float floatNum = (float)doubleNum;
System.out.println(floatNum);
출력
32.123455
ㅤ
2-4-2. float -> int
코드 작성
float floatNum = 32.1234F;
int intNum = (int)floatNum;
System.out.println(intNum);
출력
32
ㅤ
2-4-3. float -> int (손실 및 변질 발생)
코드 작성
float floatNum = 3212312312.0F;
int intNum = (int)floatNum;
System.out.println(intNum);
출력
2147483647
'자바 프로그래밍 강의' 카테고리의 다른 글
| [코드라떼] 자바 프로그래밍 - 배열 (0) | 2026.01.31 |
|---|---|
| [코드라떼] 자바 프로그래밍 - [심화] 형 변환 원리 (0) | 2026.01.31 |
| [코드라떼] 자바 프로그래밍 - [심화] 리터럴과 메모리의 관계 (0) | 2026.01.31 |
| [코드라떼] 자바 프로그래밍 - 상수 (0) | 2026.01.31 |
| [코드라떼] 자바 프로그래밍 - [심화] 정수와 실수 (0) | 2026.01.31 |
