본문 바로가기

Java

Java 형 변환 (Type Casting)

Type Casting(형 변환)

Java에서 형 변환은 데이터 타입을 다른 타입으로 바꾸는 작업을 의미한다.

Java에서는 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)에 대해 형 변환을 지원하며,

형 변환은 크게 자동 형 변환(Implicit Casting)과 명시적 형 변환(Explicit Casting)으로 나눌 수 있다.

 

 

 

Primitive Type Casting (기본 자료형 형 변환)

기본 자료형의 형 변환은 크게 두 가지 방식으로 이루어진다.

 

자동 형 변환 (Implicit Casting / Widening Casting)

작은 데이터 타입에서 큰 데이터 타입으로 변환할 때 자동으로 수행된다.

예: byte -> short -> int -> long -> float -> double

 

데이터의 손실이 발생하지 않기 때문에 안전하게 변환이 가능하고, 명시적으로 캐스팅하지 않아도 된다.

 

int num = 10;
double doubleNum = num;  // int에서 double로 자동 변환
System.out.println(doubleNum);  // 출력: 10.0

 

 

명시적 형 변환 (Explicit Casting / Narrowing Casting)

큰 데이터 타입을 작은 데이터 타입으로 변환할 때는 명시적으로 형 변환을 해주어야 한다.

예: double -> float -> long -> int -> short -> byte

 

데이터 손실이 발생할 수 있기 때문에 신중하게 사용해야 한다.

 

double doubleNum = 10.99;
int intNum = (int) doubleNum;  // double에서 int로 명시적 형 변환
System.out.println(intNum);    // 출력: 10 (소수점 이하 손실)

 

 

 

Reference Type Casting (참조 자료형 형 변환)

참조 자료형에서는 주로 상속 관계가 있는 클래스 간의 형 변환이 이루어 진다.

 

업캐스팅 (Upcasting)

 

  • 자식 클래스의 객체를 부모 클래스 타입으로 변환한다.
  • 암시적으로 수행될 수 있으며, 일반적으로 안전하다.
  • 업캐스팅은 다형성을 활용하기 위해 자주 사용된다.
class Animal {}
class Dog extends Animal {}

Animal animal = new Dog();  // Dog 객체를 Animal 타입으로 업캐스팅

 

 

 

다운캐스팅 (Downcasting)

  • 부모 클래스 타입의 객체를 자식 클래스 타입으로 변환할 때 사용한다.
  • 반드시 명시적으로 캐스팅해야 하며, 변환이 잘못되면 ClassCastException이 발생할 수 있다.
  • 다운캐스팅은 업캐스팅된 객체에만 사용 가능하다.
Animal animal = new Dog();
Dog dog = (Dog) animal;  // 명시적으로 다운캐스팅

 

 

 

Wrapper 클래스 형 변환 (Boxing & Unboxing)

Java는 기본 자료형을 객체로 다루기 위해 각 타입에 해당하는 래퍼 클래스를 제공한다.

 

AutoBoxing

int num = 5;
Integer wrappedNum = num;  // 자동으로 Integer로 변환

 

 

Unboxing

Integer wrappedNum = 10;
int num = wrappedNum;  // 자동으로 int로 변환

 

 

 

문자열 형 변환

문자열을 기본 자료형으로 반환하거나 그 반대로 변환하는 방법도 있다.

 

문자열을 기본 자료형으로 변환

String strNum = "123";
int num = Integer.parseInt(strNum);

 

 

기본 자료형을 문자열로 변환

int num = 123;
String strNum = String.valueOf(num);

 

'Java' 카테고리의 다른 글

Java 조건문 (if, if else, switch case)  (0) 2024.11.14
Java 문자열 (String)  (1) 2024.11.14
Java 배열 (Array)  (0) 2024.11.13
Java 변수와 상수  (0) 2024.11.12
Java 자료형 정리 (Java Data Type)  (1) 2024.11.11