[Java] 캐스팅(Casting)이란?

giggle·2023년 8월 29일
1

📌 캐스팅(Casting)

캐스팅(Casting)은 데이터 타입을 다른 데이터 타입으로 변환하는 과정을 말합니다. 데이터 타입 간에는 호환되지않는 경우가 많기 때문에 데이터 타입을 변환해야 할 때 사용됩니다. 캐스팅에는 크게 업캐스팅다운캐스팅 두 가지가 있습니다.

캐스팅이 필요한 이유는?

  1. 다형성 : 오버라이딩된 함수를 분리해서 활용할 수 있습니다.
  2. 상속 : 캐스팅을 통해 범용적인 프로그래밍이 가능합니다.

📌 업캐스팅

자바에서 자식 클래스는 부모 클래스의 모든 특성을 상속받습니다. 때문에 자식 클래스는 부모 클래스로 취급될 수도 있습니다.

즉, 부모 클래스의 참조변수가 자식 클래스로 객체화된 인스턴스를 가리킬 수 있게 됩니다.

또한, 업캐스팅은 작은 크기의 데이터 타입을 큰 크기의 데이터 타입으로 자동 변환하는 것을 말합니다. 이는 데이터 손실없이 수행되며 암시적 캐스팅이라고도 할 수 있습니다.

예시

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";
	}

📌 데이터 타입

정수형 타입

정수형 타입할당되는 메모리의 크기데이터의 표현 범위
byte1바이트-128 ~ 127
short2바이트-32,768 ~ 32,767
int4바이트-2,147,483,648 ~ 2,147,483,647
long8바이트-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

실수형 타입

실수형 타입할당되는 메모리의 크기데이터의 표현 범위
float4바이트(3.4 X 10^-38) ~ (3.4 X 10^38)
double8바이트(1.7 X 10^-308) ~ (1.7 X 10^308)

논리형 타입

논리형 타입할당되는 메모리의 크기데이터의 표현 범위
boolean1바이트true, false

문자형 타입

문자형 타입할당되는 메모리의 크기데이터의 표현 범위
char2바이트0 ~ 65,535

참고


피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.

0개의 댓글