IMG-LOGO
공지사항 :

Java 형변환(Type Casting) 완벽 가이드

lmkfox - 2025-06-05 06:50:28 22 Views 0 Comment

1. 형변환이란?

형변환은 하나의 자료형을 다른 자료형으로 바꾸는 것을 말합니다.

Java는 정적 타입 언어이기 때문에 컴파일 타임에 변수의 타입이 정해지며, 다른 타입 간 연산이나 대입 시 형변환이 필요합니다.


2. 자바의 데이터 타입 분류

기본 자료형 (Primitive Types)

자료형

크기

설명

byte

1바이트

-128 ~ 127

short

2바이트

약 ±32,000

int

4바이트

정수 기본형

long

8바이트

큰 정수

float

4바이트

단정밀도 실수

double

8바이트

배정밀도 실수, 기본 실수형

char

2바이트

유니코드 문자

boolean

1바이트

true 또는 false


3. 형변환의 종류

1) 

자동 형변환 (Implicit Casting, Widening Conversion)

  • 작은 자료형 → 큰 자료형으로 변환

  • 데이터 손실이 없기 때문에 Java에서 자동으로 수행됨

int num = 100;
long bigNum = num;     // 자동 형변환
double d = bigNum;     // 자동 형변환

자동 변환 가능 예시:

byte → short → int → long → float → double


2) 

강제 형변환 (Explicit Casting, Narrowing Conversion)

  • 큰 자료형 → 작은 자료형으로 변환

  • 데이터 손실이 발생할 수 있기 때문에 명시적으로 형변환 해야 함

double pi = 3.14;
int intPi = (int) pi;   // 강제 형변환, 결과: 3

long big = 100000L;
short s = (short) big;  // 강제 형변환, 데이터 손실 가능


4. 정수 ↔ 실수 간 형변환

  • 정수형을 실수형으로 바꾸면 소수점이 붙음

  • 실수형을 정수형으로 바꾸면 소수점은 버림(truncation)

int a = 10;
double b = a;        // 10.0

double c = 5.89;
int d = (int) c;     // 5


5. 문자(char)와 숫자 간 형변환

  • char는 내부적으로 유니코드(정수) 값이기 때문에 정수와 상호 변환 가능

char ch = 'A';
int code = ch;       // 65
char ch2 = (char)(code + 1);  // 'B'


6. 참조형(Reference Type) 형변환

상속 구조에서의 형변환

  • 업캐스팅 (Upcasting): 하위 클래스 → 상위 클래스 (자동 형변환)

  • 다운캐스팅 (Downcasting): 상위 클래스 → 하위 클래스 (명시적 형변환 필요)

class Animal {}
class Dog extends Animal {}

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

  • 다운캐스팅 시 실제 객체가 해당 타입이 아니면 ClassCastException 발생

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

instanceof 연산자 활용

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


7. 형변환 관련 주의사항

  • 강제 형변환은 항상 값 손실 가능성 있음

  • float → int, double → int 형변환 시 소수점 버림

  • int를 byte나 short로 변환할 때 오버플로우 주의

  • 참조형 캐스팅은 instanceof로 안전성 확인

  • boolean은 형변환 불가능 (숫자 ↔ boolean X)


8. 교육용 실습 예제

public class TypeCastingExample {
    public static void main(String[] args) {
        int i = 100;
        double d = i;              // 자동 형변환
        System.out.println(d);     // 100.0

        double pi = 3.1415;
        int intPi = (int) pi;      // 강제 형변환
        System.out.println(intPi); // 3

        char c = 'Z';
        int code = c;              // char → int
        System.out.println(code);  // 90

        Animal a = new Dog();
        if (a instanceof Dog) {
            Dog dog = (Dog) a;     // 다운캐스팅 안전
            System.out.println("형변환 성공");
        }
    }
}


9. 수업 설계 팁 (교육자용)

  • 실습 위주 접근이 효과적 (특히 숫자 → 문자, 실수 → 정수)

  • 오버플로우 예시를 통한 직관적 이해 유도

  • 참조형 캐스팅은 상속, 다형성 수업 이후에 도입

  • System.out.println()과 디버깅 활용하여 값 변화 시각적으로 확인


요약

구분

자동 형변환

강제 형변환

대상

작은 타입 → 큰 타입

큰 타입 → 작은 타입

문법

생략 가능

(타입) 명시 필요

예외 발생

없음

데이터 손실, 런타임 오류 가능

활용 사례

정수 → 실수, 업캐스팅

실수 → 정수, 다운캐스팅


댓글