IMG-LOGO
공지사항 :

자바(Java)에서 형변환(Type Casting)

lmkfox - 2025-06-22 07:19:01 26 Views 0 Comment

1. 자동 형변환 (Implicit Casting)

정의

작은 데이터 타입에서 큰 데이터 타입으로의 변환은 자동으로 수행됩니다. 이는 데이터 손실 위험이 없기 때문에 자바가 암묵적으로 허용합니다.

예시

int a = 100;
long b = a;      // int → long (자동 형변환)

float f = 3.14f;
double d = f;    // float → double (자동 형변환)

자동 형변환 가능 순서

byte → short → int → long → float → double
               ↑
             char

char는 정수형인 int로 자동 형변환됩니다.

char ch = 'A';
int code = ch;   // 65로 변환됨


2. 강제 형변환 (Explicit Casting)

정의

큰 데이터 타입을 작은 데이터 타입으로 변환할 때는 데이터 손실 가능성이 있기 때문에 명시적으로 형변환을 지정해야 합니다.

문법

타입 변수 = (타입) 값;

예시

double d = 3.14;
int i = (int) d;    // 3 (소수점 버려짐)

long l = 1000L;
short s = (short) l;

데이터 손실 예시

int x = 128;
byte b = (byte) x;  // 결과: -128 (오버플로우 발생)


3. 형변환과 연산

자바에서 두 개의 서로 다른 타입을 연산할 경우, 자동으로 더 큰 타입으로 변환된 후 연산이 수행됩니다.

int a = 10;
double b = 5.5;
double result = a + b;   // a가 자동으로 double로 변환

또한, 정수형끼리 연산 시 결과도 정수형이므로 주의가 필요합니다.

int x = 5;
int y = 2;
double avg = x / y;     // 결과: 2.0이 아닌 2.0 (정수 나눗셈)

해결하려면 하나를 double로 형변환해야 합니다:

double avg = (double) x / y;  // 결과: 2.5


4. 참조형 타입의 형변환 (업캐스팅 / 다운캐스팅)

업캐스팅 (자동)

하위 클래스 → 상위 클래스 변환은 자동으로 수행됩니다.

Dog dog = new Dog();
Animal a = dog;  // 업캐스팅 (자동)

다운캐스팅 (명시적)

상위 클래스 → 하위 클래스 변환은 명시적 형변환 필요하며, 실제 객체 타입이 일치해야 함.

Animal a = new Dog();
Dog d = (Dog) a;  // 다운캐스팅 (명시적)

실제 타입이 다르면 ClassCastException이 발생합니다.

Animal a = new Cat();
Dog d = (Dog) a;  // 런타임 오류 발생

안전한 다운캐스팅은 instanceof 연산자를 활용합니다:

if (a instanceof Dog) {
    Dog d = (Dog) a;
}


5. 문자열과 숫자 간의 형변환

숫자 → 문자열

int n = 100;
String s = String.valueOf(n);

또는

String s = n + "";

문자열 → 숫자

int i = Integer.parseInt("123");
double d = Double.parseDouble("3.14");

변환 실패 시 NumberFormatException이 발생할 수 있으므로 예외 처리를 함께 사용하는 것이 좋습니다.


6. 형변환 관련 클래스

클래스

기능

Integer, Double 등

문자열 ↔ 기본형 형변환 지원

String.valueOf()

어떤 타입이든 문자열로 변환

parseInt, parseDouble

문자열을 숫자로 변환


결론 요약

구분

설명

자동 형변환

작은 타입 → 큰 타입, 손실 없음

강제 형변환

큰 타입 → 작은 타입, 손실 가능성 존재

참조형 변환

업캐스팅은 자동, 다운캐스팅은 명시 필요

연산 시 변환

더 큰 타입으로 자동 형변환 후 연산

문자열 변환

valueOf, parseXxx 등 메서드 활용


댓글