캐스팅(Casting)은 데이터 타입을 다른 데이터 타입으로 변환하는 과정을 말합니다. 데이터 타입 간에는 호환되지않는 경우가 많기 때문에 데이터 타입을 변환해야 할 때 사용됩니다. 캐스팅에는 크게 업캐스팅과 다운캐스팅 두 가지가 있습니다.
자바에서 자식 클래스는 부모 클래스의 모든 특성을 상속받습니다. 때문에 자식 클래스는 부모 클래스로 취급될 수도 있습니다.
즉, 부모 클래스의 참조변수가 자식 클래스로 객체화된 인스턴스를 가리킬 수 있게 됩니다.
또한, 업캐스팅은 작은 크기의 데이터 타입을 큰 크기의 데이터 타입으로 자동 변환하는 것을 말합니다. 이는 데이터 손실없이 수행되며 암시적 캐스팅이라고도 할 수 있습니다.
int numInt = 5;
double numDouble = numInt; // 암시적 캐스팅
class Person{
String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
String age;
public Student(String name) {
super(name); // 부모 클래스의 생성자를 호출하는 메서드
}
}
public class CastingTest {
public static void main(String[] args) {
// student 참조변수를 이용하면 age, name에 접근 가능
Student student = new Student("giggle");
// person 참조변수를 이용하면 Student 객체의 멤버 중에서 Person 클래스의 멤버에만 접근이 가능하다.
Person person = student; // "업캐스팅"
person.age = "24"; // 컴파일 오류
다운캐스팅은 자신의 고유한 특성을 잃은 자식 클래스의 객체를 복구시키는 것입니다. 즉, 업캐스팅 된 것을 다시 원상태로 돌리는 것입니다.
명시적캐스팅으로 큰 크기의 데이터 타입을 작은 크기의 데이터 타입으로 변환합니다. 해당 경우에는 데이터 손실이 발생할 수 있으므로 명시적으로 변환을 진행하고 괄호 안에 변환할 타입을 명시합니다.
double numDouble = 3.14;
int numInt = (int) numDouble; // 명시적 캐스팅
class Person{
String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
String age;
public Student(String name) {
super(name);
}
}
public class CastingTest2 {
public static void main(String[] args) {
// 업 캐스팅 선행
Person person = new Student("giggle");
// 다운 캐스팅
Student student = (Student) person;
// name에 접근. student 타입이니까 전부 접근 가능
student.name = "subgiggle";
// age에 접근
student.age = "26";
}
정수형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
---|---|---|
byte | 1바이트 | -128 ~ 127 |
short | 2바이트 | -32,768 ~ 32,767 |
int | 4바이트 | -2,147,483,648 ~ 2,147,483,647 |
long | 8바이트 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
실수형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
---|---|---|
float | 4바이트 | (3.4 X 10^-38) ~ (3.4 X 10^38) |
double | 8바이트 | (1.7 X 10^-308) ~ (1.7 X 10^308) |
논리형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
---|---|---|
boolean | 1바이트 | true, false |
문자형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
---|---|---|
char | 2바이트 | 0 ~ 65,535 |
피드백 및 개선점은 댓글을 통해 알려주세요😊