오늘은 여기까지
Promotion and Casting (자바의 타입변환) 본문
타입변환
서로 다른 데이터 타입끼리의 연산이 필요할 때, 변수의 데이터 타입을 바꿔주는 작업을 데이터 타입의 형변환(타입변환)이라고 한다.
형변환에는 자동 형변환(Promotion) 과 강제 형변환(Casting) 이 있다. 다른말로 자동 형변환은 묵시적 타입 변환, 강제 형변환은 명시적 타입 변환이라고도 한다.
1. Promotion (자동 형변환)
- 프로그램 실행 도중에 자동적으로 형변환(타입변환)이 일어나는 것을 말한다
- 작은 데이터 타입에서 큰 데이터 타입으로 자동으로 변환
- 데이터 손실의 위험이 없기 때문에 자동으로 수행된다
- 변환 순서: byte → short → int → long → float → double
byte byteValue = 10;
int intValue = byteValue; // 자동으로 int로 변환
long longValue = intValue; // 자동으로 long으로 변환
float floatValue = longValue; // 자동으로 float으로 변환
2. Casting (강제 형변환)
- 특정 조건을 갖추지 못했지만, 형변환을 하고 싶을때 사용
- 큰 데이터 타입에서 작은 데이터 타입으로 강제로 변환하는 것
- 변환하고자 하는 타입을 괄호()로 명시한다
- 데이터 손실의 가능성이 있다
double doubleValue = 3.14;
int intValue = (int)doubleValue; // 3.14 → 3 으로 소수점 손실
강제 형변환 시 주의할 점
- 정수형 연산
- 나눗셈 연산 결과를 강제 형변환해도 원하는 결과가 나오지 않음. 따라서 정확한 실수 계산이 필요한 경우에는 계산 전에 피연산자 중 하나를 실수형으로 먼저 변환해야 한다.
- 오버플로우와 언더플로우: 예를 들어 byte 타입의 범위는 -128에서 127까지인데, 128을 저장하려고 하면 오버플로우가 발생하여 -128이 저장된다.
int a = 10; int b = 4; double result = a / b; // 2.0 (int 연산 후 double로 변환) double correct = (double)a / b; // 2.5 (double로 변환 후 연산)
- 객체 형변환
- 다운캐스팅 시 부모 타입의 참조변수가 실제로 참조하는 객체가 어떤 타입인지 확인해야 함.
- ` instanceof ` 검사 없이 다운캐스팅을 시도하면, 실제 객체 타입이 변환하려는 타입과 호환되지 않는 ` ClassCastException `이 발생할 수 있다.
// 업캐스팅 (자동 형변환) Parent parent = new Child(); // 다운캐스팅 (명시적 형변환) Child child = (Child)parent; // instanceof 연산자로 안전한 형변환 if (parent instanceof Child) { Child safeChild = (Child)parent; }
'CS > 자바' 카테고리의 다른 글
Garbage Collection 개념 및 동작 원리 (1) | 2024.11.27 |
---|