마치 스튜어디스, 스튜디어스? 불륜, 볼륨, 불륨처럼 갑자기 생각하려면 헷갈릴때가 있어서 귀찮지만 간단하게라도 짚고 넘어가고 싶었다.
업 캐스팅(자동 형변환) / 다운 캐스팅(강제 형변환)
- 업 캐스팅(Upcasting): 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것
- 자동 형변환: 낮은 자료형 -> 높은 자료형
[1]
Child child = new Child();
Parent parent = child; // 업 캐스팅(자동 형변환) 자식타입 -> 부모타입
[2]
byte smallBowl = 10; // 작은 그릇
int bigBowl = 10000; // 큰그릇
int result = bigBowl - smallBowl; // smallBowl이 int형으로 자동 형변환 되어 int끼리 계산된다.
- 다운 캐스팅(Downcasting): 자식 타입이 자동 형변환에 의해 부모 타입으로 변한 이후에 다시 자식 타입으로 변환되는것 (모든 부모 타입이 자식 타입으로 다운 캐스팅 할 수 없으며 기존에 자식타입이 부모 타입으로 자동 형변환이 되었을 경우에만 다운 캐스팅을 이용하여 다시 자식 타입으로 변환할 수 있다.)
- 강제 형변환: 높은 자료형 -> 낮은 자료형
[1]
Parent parent = new Child(); // 업 캐스팅(자동 형변환) 자식타입 -> 부모타입
Child child = (Child) parent; // 다운 캐스팅(강제 형변환) 부모타입 -> 자식타입
[2]
int num = 10;
byte value = (byte) num; // byte의 범위인 -128 ~ 127까지는 데이터 손실도 발생하지 않고 명시적으로 나타내지 않아도 컴파일러가 자동 형변환 해줌
int i = 100;
byte b = i; // 에러, 컴파일러는 변수 안에 값을 알지 못하기 때문
double dbNum = 12.3456;
int num2 = (int) dbNum; // 12
오토 박싱 / 언 박싱
- 오토 박싱(Autoboxing): int -> Integer, double -> Double 처럼 기본형 타입의 값을 래퍼 클래스의 변수에 할당 할 경우에 일어난다.
List<Integer>list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add(i); // list.add(Integer.valueOf(i)); 이와 같이 오토 박싱이 일어난다.
}
- 언 박싱(Unboxing): Integer -> int, Double -> double, 오토 박싱의 반대
int sum = 0;
for (Integer i = 0; i < 100; i++) {
sum += i;
}
'Development > Java' 카테고리의 다른 글
자바의 컬렉션과 관련된 클래스 정리 (0) | 2023.03.09 |
---|---|
JVM GC (0) | 2023.02.03 |
JVM 메모리 (0) | 2023.02.03 |