
Java 에서 데이터 타입은 크게
기본 타입 (Primitive Type) 과 참조 타입 (Reference Type) 으로 나눌 수 있다.
그리고, 형 변환(Casting) 은 변수의 타입을 변환하는 행위인데,
이것또한, 암시적(Implicit) 변환과 명시적(Explicit) 변환이 존재한다.
1. Java 데이터 타입의 종류
1.1 기본 데이터 타입 (Primitive Types)
| 데이터 타입 | 크기 | 범위 | 기본값 | 예시 |
| byte | 1byte | -128 ~ 127 | 0 | byte b = 10; |
| short | 2bytes | -32,768 ~ 32,767 | 0 | short s = 100; |
| int | 4bytes | -2,147,483,648 ~ 2,147,483,647 | 0 | int i = 1000; |
| long | 8bytes | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0L | long l = 100000L; |
| float | 4bytes | ±3.4x10^38 (7자리 정밀도) | 0.0f | float f = 3.14f; |
| double | 8bytes | ±1.7x10^308 (15자리 정밀도, float 보다 더 정밀함) | 0.0d | double d = 3.14159; |
| char | 2bytes | 0 ~ 65,535 (유니코드 문자) | '\u0000' | char c = 'A'; |
| boolean | 1bit | true / false | false | boolean flag = true; |
1.2 참조 데이터 타입 (Reference Types)
- 클래스 (Class)
- 배열 (Array)
- 인터페이스 (Interface)
- 열거형 (Enum)
2. 형 변환 (Casting)
2.1 암시적 형 변환 (Implicit Casting)
> 작은 크기의 타입에서 큰 크기의 타입으로 변환할 때, 자동으로 변환된다.
byte → short → int → long → float → double
ex)
int num = 100;
double result = num; // int에서 double로 자동 변환
System.out.println(result); // 출력: 100.0
※ byte에서 char로 형 변환이 불가능한 이유
byte와 char는 메모리 크기는 비슷하지만, 값의 표현 범위와 의미적 차이 때문에 암시적 형 변환이 허용되지 않는다.
- 값의 범위 차이
- byte: -128 ~ 127 (음수 포함)
- char: 0 ~ 65,535 (양수만)
- 의미적 차이
- byte: 숫자 데이터 타입 (정수)
- char: 문자 데이터 타입 (유니코드 문자)
예제 코드 : byte → char 형 변환
public class ByteToCharExample {
public static void main(String[] args) {
byte b = 65; // A의 유니코드 값
char c = (char) b; // 명시적 형 변환이 필요
System.out.println("byte → char: " + c); // 출력: A
byte negativeByte = -1;
char convertedChar = (char) negativeByte;
System.out.println("byte(-1) → char: " + (int) convertedChar); // 출력: 65535
}
}
위 코드에서 -1을 char로 변환하면 65535로 변환된다.
이는 2의 보수 표현 방식 때문이며, char는 양수값만 표현하기 때문에 결과적으로 65535로 해석된 것이다.
2.2 명시적 형 변환 (Explicit Casting)
>큰 크기의 타입을 작은 크기의 타입으로 변환할 때에는 명시적으로 형 변환을 해야한다.
하지만, 이 경우 데이터의 손실이 발생할 수 있으니 주의해야 한다!
ex)
double pi = 3.14159;
int intPi = (int) pi; // double을 int로 명시적 변환
System.out.println(intPi); // 출력: 3 (소수점 이하 손실)
3. 예제 코드
public class CastingExample {
public static void main(String[] args) {
// 암시적 형 변환
int a = 100;
long b = a;
double c = b;
System.out.println("암시적 변환: " + c);
// 명시적 형 변환
double x = 123.456;
int y = (int) x;
System.out.println("명시적 변환: " + y);
// char와 int 사이의 변환
char ch = 'A';
int ascii = ch;
System.out.println("char → int: " + ascii);
int num = 66;
char convertedChar = (char) num;
System.out.println("int → char: " + convertedChar);
}
}
개발을 하며 데이터 타입과 형 변환은 가장 기초적이면서 중요한 내용이다.
메모리 관리와 성능에 직접적인 영향을 미칠 수 있으며,
혹시나 잘못된 형변환으로 예상치 못한 결과값을 받아볼 수도 있다!