자바 공부/[ 完 ] 자바 실전 - 기본편
10-1. 다형성 - 이론과 다형적 참조
잘데친갈비
2024. 3. 19. 16:48
다형성
- 객체 지향 프로그래밍의 특징 중 하나다.
- 객체 지향 프로그래밍의 꽃
- 이름 그대로 다양한 형태를 뜻한다.
- 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 뜻하고, 하나의 객체는 하나의 타입으로 고정되어 있지만 다형성을 사용하면 하나의 객체가 다른 타입으로 사용될 수 있다는 뜻이다.
다형성의 핵심 이론
- 다형적 참조
- 메서드 오버라이딩
다형적 참조
- 부모 타입의 변수가 자식 인스턴스 참조
→ 부모 class 🔽
package poly.basic;
public class Parent {
public void parentMethod() {
System.out.println("Parent.parentMethod");
}
}
→ 상속 받은 자식 class 🔽
package poly.basic;
public class Child extends Parent{
public void childMethod() {
System.out.println("Child.childMethod");
}
}
→ 부모 타입 변수 선언 하고 자식 타입으로 객체 생성 🔽
package poly.basic;
public class PolyMain {
public static void main(String[] args) {
// 부모 변수가 자식 인스턴스 참조(다형적 참조)
System.out.println("Parent -> Child");
Parent poly = new Child();
poly.parentMethod();
}
}
⇒ 위와 같이 부모 타입 변수가 자식 타입 객체를 담을 수 있다.
Parent poly = new Child();
코드 실행 의 로직을 보면
- Child 타입으로 객체가 생성된다
- Child 타입으로 생성된 객체 내부에는 Parent 영역과 Child 영역이 생성 된다.
- 하지만 poly 변수는 Parent 타입으로 생성 했기 때문에 생성된 객체 내에 Parent 영역만 끌어다 쓰게 된다.
다형적 참조 결론
- 부모 타입은 → 자식을 담을 수 있다.
- 자식 뿐 아니라 자손들의 타입도 담을 수 있다.
- 하지만 부모는 자식의 기능을 호출할 수 없다.
- 자식 타입은 → 부모를 담을 수 없다.
다형적 참조에서 부모 타입이 자식 타입기능을 사용하지 못하는 이유
- 상속 관계로 객체를 생성 했을 때는 자식이 누가 부모 인지 찾을 수 있지만 부모는 누가 자식인지 찾을 수 없다.( 마치 미래에 내가 누구를 낳을지 모르는 것처럼? )
- Parent 클래스의 정보에 누가 자식인지 정보도 없기 때문이기도 해서 못 찾는다.
- 하지만 자식을 찾고 싶을 때 캐스팅 이란 기능을 사용하면 된다.