728x90
반응형
1. 기본형(Primitive Type) 형변환
기본형: byte, short, int, long, float, double, char, boolean 등
이 중 boolean은 형변환이 불가능
1-1. 자동 형변환
작은 타입 → 큰 타입으로 변환할 때 자동으로 이루어짐.
int i = 100; long l = i; // int → long (자동 형변환)
float f = l; // long → float (자동 형변환)
System.out.println(f); // 출력: 100.0
1-2. 강제 형변환
큰 타입 → 작은 타입으로 변환할 때 (타입)을 명시해야 함.
double d = 3.14;
int i = (int) d; // double → int (소수점 제거됨)
System.out.println(i); // 출력: 3
데이터 손실 가능성 있음
🔹 2. 참조형(Reference Type) 형변환
객체들 간의 형변환. 상속 관계나 인터페이스 구현 관계가 있어야 가능.
2-1. 업캐스팅 (Upcasting)
하위 클래스 → 상위 클래스
자동 형변환이 이루어짐
package test;
class Animal {
void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal {
void bark() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Animal animal = dog; // 업캐스팅 (자동)
animal.sound(); // "동물 소리"
dog.bark();
// animal.bark(); // 오류: Animal 타입에는 bark() 없음
}
}
2-2. 다운캐스팅 (Downcasting)
상위 클래스 → 하위 클래스
강제 형변환이 필요함 (하위타입)
package test;
class Animal {
void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal {
void bark() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
// 업캐스팅: Dog → Animal (자동)
Dog d = new Dog();
Animal a1 = d; // 업캐스팅
a1.sound(); // "동물 소리" (Animal 메서드 호출)
// 다운캐스팅: Animal → Dog (강제)
Dog d2 = (Dog) a1; // 실제 인스턴스가 Dog이므로 안전
d2.bark(); // "멍멍"
// 잘못된 다운캐스팅: Animal → Dog (런타임 오류)
Animal a2 = new Animal(); // 실제 인스턴스는 Animal
// Dog d3 = (Dog) a2; // 런타임 오류 발생!
// d3.bark();
// 위 코드 실행 시 ClassCastException 발생
}
}
실제 인스턴스가 Dog가 아닐 경우 ClassCastException 발생
instanceof로 타입 체크
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.bark();
}
3. 문자열과 숫자 간 형변환
문자열 → 숫자 등
int i = 123;
double d = 3.14;
boolean b = true;
char c = 'A';
System.out.println(String.valueOf(i)); // "123"
System.out.println(String.valueOf(d)); // "3.14"
System.out.println(String.valueOf(b)); // "true"
System.out.println(String.valueOf(c)); // "A"
숫자 → 문자열
int i = 456;
String str = String.valueOf(i); // "456"
정리 표
형변환 종류자동/강제예시 코드
int → long | 자동 | long l = 10; |
double → int | 강제 | int i = (int) 3.14; |
Dog → Animal | 자동 | Animal a = new Dog(); |
Animal → Dog | 강제 | Dog d = (Dog) a; |
String → int | 강제(메서드) | int i = Integer.parseInt("123"); |
int → String | 강제(메서드) | String s = String.valueOf(123); |
728x90
반응형
'이론 > Java' 카테고리의 다른 글
Java static (0) | 2025.07.06 |
---|---|
Java 배열 (0) | 2025.07.06 |
OOP) 변수 (Instance, Parameter, Local, Global) (0) | 2024.01.02 |
OOP) 클래스와 객체 (0) | 2024.01.02 |
Java) 변수와 데이터 타입, 연산자 (0) | 2023.12.27 |