Development/Java

업 캐스팅 / 다운 캐스팅, 자동 형변환 / 강제 형변환, 오토 박싱 / 언 박싱

DevKTak 2023. 2. 1. 20:49

마치 스튜어디스, 스튜디어스? 불륜, 볼륨, 불륨처럼 갑자기 생각하려면 헷갈릴때가 있어서 귀찮지만 간단하게라도 짚고 넘어가고 싶었다.

 

업 캐스팅(자동 형변환) / 다운 캐스팅(강제 형변환)

  • 업 캐스팅(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