오늘은 여기까지

Promotion and Casting (자바의 타입변환) 본문

CS/자바

Promotion and Casting (자바의 타입변환)

dev-99 2024. 11. 29. 15:15
타입변환

 

서로 다른 데이터 타입끼리의 연산이 필요할 때, 변수의 데이터 타입을 바꿔주는 작업을 데이터 타입의 형변환(타입변환)이라고 한다.

형변환에는 자동 형변환(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 으로 소수점 손실

 

 


 

 

강제 형변환 시 주의할 점

  1. 정수형 연산
    • 나눗셈 연산 결과를 강제 형변환해도 원하는 결과가 나오지 않음. 따라서 정확한 실수 계산이 필요한 경우에는 계산 전에 피연산자 중 하나를 실수형으로 먼저 변환해야 한다.
    • 오버플로우와 언더플로우: 예를 들어 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로 변환 후 연산)


  2. 객체 형변환
    • 다운캐스팅 시 부모 타입의 참조변수가 실제로 참조하는 객체가 어떤 타입인지 확인해야 함.
    •  ` 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