IMG-LOGO
공지사항 :

자바 형변환(Type Casting)

lmkfox - 2025-06-30 06:29:34 19 Views 0 Comment

1. 기본형(Primitive Type)의 형변환

기본형 간의 형변환은 자동 형변환(묵시적)과 강제 형변환(명시적)으로 나뉩니다.

1.1 자동 형변환 (묵시적 변환)

작은 크기의 타입에서 큰 크기의 타입으로 변환할 때 자바가 자동으로 수행합니다.

| byte → short → int → long → float → double |

| char → int → long → float → double         |

예시:

int i = 100;
long l = i;         // int → long (자동 형변환)
float f = l;        // long → float (자동 형변환)

1.2 강제 형변환 (명시적 변환)

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

double d = 9.78;
int i = (int) d;    // double → int (소수점 이하 제거됨)

형변환 예시

byte b = 10;
int i = b;          // 자동 형변환

int x = 130;
byte y = (byte) x;  // 강제 형변환: 오버플로우 발생 가능


2. 정수형과 실수형 간 형변환

int i = 10;
double d = i;       // 자동 형변환: 10 → 10.0

double d2 = 9.99;
int i2 = (int) d2;  // 강제 형변환: 9.99 → 9


3. char와 int 간 형변환

char는 내부적으로 유니코드 정수로 처리되므로 int와의 형변환이 자주 사용됩니다.

char c = 'A';
int code = c;       // char → int : 65

int i = 66;
char ch = (char) i; // int → char : 'B'


4. boolean은 형변환 불가

boolean 타입은 다른 기본형 타입과 형변환이 불가능합니다.

boolean flag = true;
int num = (int) flag; // 오류 발생


5. 참조형(Reference Type)의 형변환

참조형은 상속 관계에 따라 형변환이 가능합니다.

5.1 업캐스팅 (Upcasting)

자식 클래스 → 부모 클래스

자동으로 변환됩니다.

class Animal {}
class Dog extends Animal {}

Dog d = new Dog();
Animal a = d; // 자동 형변환 (업캐스팅)

5.2 다운캐스팅 (Downcasting)

부모 클래스 → 자식 클래스

명시적인 형변환이 필요하며, 실행 시 오류 가능성이 있습니다.

Animal a = new Dog();
Dog d = (Dog) a; // 명시적 형변환 (정상)

Animal a2 = new Animal();
Dog d2 = (Dog) a2; // 실행 시 ClassCastException 발생

다운캐스팅 전에 instanceof 연산자를 통해 타입을 확인하는 것이 좋습니다.

if (a2 instanceof Dog) {
    Dog d2 = (Dog) a2;
}


6. Wrapper 클래스 형변환

래퍼 클래스 간에는 valueOf, parse, xxxValue() 메서드를 사용하여 형변환합니다.

String str = "123";
int num = Integer.parseInt(str);         // 문자열 → 정수

double d = 3.14;
int i = (int) d;                         // double → int

Integer boxed = Integer.valueOf(100);    // int → Integer
int unboxed = boxed.intValue();          // Integer → int


7. 자동 박싱(Auto-Boxing)과 언박싱(Auto-Unboxing)

기본형과 래퍼 클래스 간의 변환은 자동으로 일어납니다 (Java 5 이상).

Integer i = 10;        // int → Integer (Auto-boxing)
int n = i;             // Integer → int (Auto-unboxing)


8. 형변환 관련 주의사항

  • 데이터 손실 주의: 큰 타입에서 작은 타입으로 형변환할 때 값 손실 또는 오버플로우가 발생할 수 있습니다.

  • 문자와 숫자 구분: '1' (char)과 1 (int)은 다르며, 형변환 시 유의해야 합니다.

  • 참조형 변환 시 예외 발생 가능: 잘못된 다운캐스팅은 ClassCastException을 발생시킵니다.

  • boolean은 다른 타입과 변환 불가: 예외적인 존재로 별도 취급됩니다.


마무리 요약

형변환 종류

변환 방향

필요 여부

예시

자동 형변환

작은 타입 → 큰 타입

자동

int → long, float → double

강제 형변환

큰 타입 → 작은 타입

명시적 필요

(int) 3.14, (byte) 130

업캐스팅

자식 → 부모 클래스

자동

Dog → Animal

다운캐스팅

부모 → 자식 클래스

명시적 필요

(Dog) animal

박싱/언박싱

기본형 ↔ 래퍼 클래스

자동

int ↔ Integer


댓글