-
[ Java ] 다형성 ( Polymorphism )면접 준비 2020. 5. 25. 17:54
사전적 의미로는 같은 생물종이지만 모습이나 특징이 고유한 성질을 가지는 것을 의미합니다. 관용적인 의미로는 클래스나 메소드가 다양한 형태로 사용되는 것을 의미합니다.
즉, java에서 다형성은 같은 객체이지만 다양하게 구현되어 각자 고유한 성질을 가지는 객체로 사용되는 것을 말합니다. 대표적으로 Overring과 Overloading, Interface가 있습니다.
Casting
Casting은 부모, 자식 클래스끼리만 가능합니다. 같은 부모를 상속받고 있는 클래스들이라도 전혀 관계없는 클래스 입니다.
UpCasting
부모 클래스의 래퍼런스 변수가 자식 클래스 객체를 참조하게 되면 자식 클래스 객체의 타입은 자동으로 부모 클래스 타입으로 변환됩니다.
Person person = new Employee(); Person person = new Student();
java에서는 자식 클래스 래퍼런스 변수가 부모 클래스 래퍼런스 변수를 참조하는 것을 허용하지 않습니다.
자식 클래스의 래퍼런스 변수가 부모 클래스 객체를 참조하면 자식 클래스 변수 명세로 호출하는 변수나 메소드가 실질적으로 힙 영역에 생성되어 있는 부모 클래스 객체에 존재하지 않을 수 있기 때문에 문제가 발생할 수 있습니다. 반면에 부모 클래스 래퍼런스 변수가 자식 클래스 객체를 참조할 경우에는 부모 클래스에 정의되어 있는 변수나 메소드는 항상 자식 클래스가 상속받기 때문에 힙 영역에 생성된 자식 클래스 객체에 존재합니다.
DownCasting
자식 클래스의 래퍼런스 변수가 부모 클래스 객체를 참조하면 자동으로 자식 클래스 타입으로 변환되지 않는다. 따라서 부모 클래스 타입을 자식 클래스 변수에 참조시키려면 명시적으로 자식 클래스 타입으로 캐스팅해 주어야 합니다.
Employee employee = new Employee(); Person person = employee; Employee emp = (Employee)person;
위의 코드에서 person 변수를 참조하는 객체가 실질적으로 Employee 클래스 객체입니다. 2번째 줄에서 Employee 타입의 객체의 타입이 자동으로 Person 타입으로 캐스팅되었을 뿐 실질적으로 heap 영역에 생성되어 있는 객체에는 변화가 없습니다. 따라서 3번째 줄에서 emp 변수가 참조하는 것은 Person 클래스 객체가 아니고 Employee 클래스 객체인 것입니다. 결과적으로 Employee 타입의 래퍼런스 변수가 Employee 타입의 객체를 참조하게 되어 문제가 발생하지 않습니다.
Instanceof
참조 변수 instanceof 캐스팅할 타입
특정 객체를 특정 래퍼런스 변수 타입으로 캐스팅이 가능한지를 판단해 주는 연산자입니다.
출처
1. 생활코딩 - 다형성
'면접 준비' 카테고리의 다른 글
[ Java ] 예외 처리하기 (0) 2020.05.29 [ Java ] final 과 static (0) 2020.05.25 [ Java ] 제네릭 ( Generic ) (0) 2020.05.25 [ Java ] Collection (0) 2020.05.25