Java/자바 정리

62. 다형성 (Polymorphism) – 부모 타입으로 자식 객체 참조하기

코딩하는냥이 2025. 5. 7. 15:19
반응형

이번 글에서는 부모 타입으로 자식 객체를 참조하는 방식
그럴 때 호출되는 오버라이딩 메서드의 동작 방식을 실습합니다.
이것이 바로 객체지향 프로그래밍의 핵심 중 하나인 다형성(Polymorphism) 입니다.


📦 부모 클래스 코드 (Parent.java)

package ch07.sec07.exam02;

public class Parent {
	public void method1() {
		System.out.println("Parent-method1()");
	}

	public void method2() {
		System.out.println("Parent-method2()");
	}
}

📦 자식 클래스 코드 (Child.java)

package ch07.sec07.exam02;

public class Child extends Parent {
	public void method2() {
		System.out.println("Child-method2()");
	}

	public void method3() {
		System.out.println("Child-method3()");
	}
}

📌 실행 코드 (ChildExample.java)

package ch07.sec07.exam02;

public class ChildExample {
	public static void main(String[] args) {
		Child child = new Child();
		Parent parent = child; // 자동 타입 변환 (업캐스팅)

		parent.method1(); // Parent의 method1()
		parent.method2(); // Child에서 오버라이딩된 method2()
		// parent.method3(); // (X) Parent 타입에는 method3()이 없음
	}
}

💬 코드 설명

  • Parent parent = new Child();
    → 자식 객체를 부모 타입으로 참조하는 업캐스팅
  • parent.method1()
    → 부모 클래스에서 정의된 메서드 → Parent-method1() 실행
  • parent.method2()
    → 자식 클래스에서 오버라이딩한 메서드 → Child-method2() 실행
    → 이처럼 호출은 참조 변수 타입이 아니라 실제 객체 기준으로 동작함 (동적 바인딩)
  • parent.method3()
    → ❌ 부모 타입에는 존재하지 않기 때문에 호출 불가 → 컴파일 오류

💻 실행 결과

Parent-method1()
Child-method2()

📌 간단 정리

선언 타입 호출 가능 메서드 실제 실행 메서드
Parent method1(), method2() Parent 또는 Child에 따라 다름
Child method1(), method2(), method3() 모두 호출 가능

💡 포인트 정리

  • 부모 타입으로 자식 객체를 참조할 수 있다 → 업캐스팅
  • 오버라이딩된 메서드는 실제 객체 기준으로 실행됨
  • 부모 타입에는 없는 메서드는 호출 불가 (컴파일 오류)
  • 다형성은 유연하고 확장 가능한 구조 설계의 핵심 개념
    📌 정리하자면,
    다형성은 하나의 타입(부모)으로 여러 타입(자식)의 객체를 다룰 수 있게 해주며,
    공통된 인터페이스로 다양한 동작을 구현할 수 있는 기반이 됩니다.