Casting

  • 캐스팅(형변환)이란
    변수 또는 상수의 타입을 다른 타입으로 변환하는 것
    변수가 원하는 정보를 다 가지고 있다.
  • 활용
    다형성: 오버라이딩된 함수를 분리해서 사용
    상속: 캐스팅을 통해 범용적인 프로그래밍

  • 종류
    묵시적 형변환(업캐스팅): 캐스팅이 자동 발생

Animal dog = new Dog();

명시적 형변환(다운캐스팅): 캐스팅할 내용을 적어줘야함
다운캐스팅은 업캐스팅 발생 이후에 작용한다.

Animal dog = new Dog();
Dog c = (Dog) p;
class Animal {
	int name;

	Animal() {}

	Animal(int name) {
		this.name = name;
	}

	void printInfo() {
		System.out.println("Animal");
	}
}

class Dog extends Animal {
	String name;

	Dog() {}

	Dog(int age, String name) {
		super(age);
		this.name = name;
	}

	@Override 
	void printInfo() {
		System.out.println("Dog");
	}

}

public class Main {
    public static void main(String[] args) {
        Animal p = new Dog();
        
        p.printInfo();
        Dog c = (Dog) new Animal();
    }
}
  • p.printInfo();

Dog 출력

자바에서는 오버라이딩된 함수를 동적 바인딩하기 때문에, Animal에 담겼어도 Dog의 printInfo() 함수를 불러오게 된다.

  • Dog c = (Dog) new Animal();

런타임 에러

컴파일 과정에서는 데이터형의 일치만 따진다. 프로그래머가 따로 (Dog)로 형변환을 해줬기 때문에 컴파일러는 문법이 맞다고 생각해서 넘어간다. 하지만 런타임 과정에서 Dog 클래스에 Animal 클래스를 넣을 수 없다는 것을 알게 되고, 런타임 에러가 나오게 되는것!

좋은 웹페이지 즐겨찾기