자동 타입 변환

satic·2025년 3월 18일

자동 타입 변환 (Implicit Type Conversion)

1. 자동 타입 변환이란?

자동 타입 변환(Implicit Type Conversion)이란 컴파일러나 인터프리터가 개발자의 명시적인 지시 없이 한 데이터 타입을 다른 데이터 타입으로 변환하는 과정을 의미합니다. 이를 "암시적 형변환" 이라고도 합니다.

인터프리터(Interpreter)는 소스 코드 한 줄 한 줄을 실행하면서 번역하는 프로그램을 의미합니다.
즉, 전체 코드를 한꺼번에 기계어로 변환하는 것이 아니라, 한 줄씩 읽고 즉시 실행하는 방식입니다.

2. 자동 타입 변환의 원칙

  1. 데이터 손실이 없는 방향으로 변환
    → 작은 범위 타입에서 큰 범위 타입으로 변환이 일어납니다.
    → 예: intfloat, floatdouble
  2. 같은 종류의 타입끼리 변환
    → 정수끼리 변환 (byteint), 실수끼리 변환 (floatdouble)

3. 자동 타입 변환 예제

(1) 정수형 간의 변환

byte a = 10;
int b = a;  // byte → int (자동 변환)
System.out.println(b);  // 출력: 10

✔ 작은 크기의 byte가 더 큰 크기의 int로 변환됨

(2) 정수 → 실수 변환

int num = 42;
double d = num;  // int → double (자동 변환)
System.out.println(d);  // 출력: 42.0

int는 정수이지만, 자동 변환을 통해 실수형 double로 변환됨

(3) 문자 → 정수 변환

char ch = 'A';
int ascii = ch;  // char → int (자동 변환)
System.out.println(ascii);  // 출력: 65 ('A'의 ASCII 코드 값)

char는 내부적으로 숫자로 저장되므로, int로 자동 변환됨


4. 자동 타입 변환이 발생하지 않는 경우

  1. 큰 크기의 타입을 작은 크기로 변환하는 경우 (데이터 손실 가능)

    int num = 130;
    byte smallNum = num;  // 오류 발생! (명시적 형변환 필요)

    ✅ 해결 방법: 명시적 변환(캐스팅) 사용

    byte smallNum = (byte) num;  // 강제 형변환 (데이터 손실 발생 가능)
  2. boolean은 자동 변환되지 않음

    boolean flag = true;
    int num = flag;  // 오류 발생! (boolean → int 자동 변환 불가능)

5. 자동 타입 변환이 많이 쓰이는 곳

  1. 수식에서의 변환
    → 연산을 수행할 때, 작은 타입이 큰 타입으로 변환됨

    int a = 5;
    double b = 2.5;
    double result = a + b;  // int → double 자동 변환
    System.out.println(result);  // 출력: 7.5
  2. 메서드 호출 시 타입 변환
    → 메서드 매개변수에 맞게 자동 변환됨

    void printDouble(double x) {
        System.out.println(x);
    }
    
    int num = 10;
    printDouble(num);  // int → double 자동 변환 (출력: 10.0)

6. 자동 타입 변환 정리

변환 전 타입변환 후 타입예시
byteshort, int, long, float, doublebyte a = 10; int b = a;
shortint, long, float, doubleshort s = 20; float f = s;
intlong, float, doubleint i = 30; double d = i;
longfloat, doublelong l = 40L; float f = l;
floatdoublefloat f = 5.5f; double d = f;
charint, long, float, doublechar c = 'A'; int i = c;

7. 결론

  • 자동 타입 변환은 데이터 손실이 없는 방향으로만 일어난다.
  • boolean 타입은 자동 변환되지 않는다.
  • 연산이나 메서드 호출 시에도 자동 변환이 발생할 수 있다.
  • 데이터 손실이 발생할 가능성이 있는 경우, 명시적 형변환(강제 캐스팅)이 필요하다.

profile
95.06.09

0개의 댓글