다형성 보충자료
다형성 (Polymorphism)
1. 다형성이란?
정의: 하나의 부모 클래스 타입 변수가 여러 자식 클래스의 인스턴스를 참조할 수 있는 성질을 말합니다.
특징:
부모 클래스 타입 변수로 자식 클래스의 객체를 참조할 수 있습니다. (업캐스팅)
반대로 자식 클래스의 타입 변수로 부모 객체를 참조할 수는 없습니다. (다운캐스팅 필요)
2. 다형성의 주요 특징
(1) 부모 타입 변수는 자식 인스턴스를 참조할 수 있다.
(2) 오버라이딩된 메서드는 항상 우선순위 호출
부모 타입으로 참조하더라도, 오버라이딩된 메서드는 실제 인스턴스의 메서드가 호출됩니다.
3. 업캐스팅 (Upcasting)
(1) 업캐스팅이란?
정의: 자식 클래스의 객체를 부모 클래스 타입 변수로 참조하는 것을 말합니다.
특징:
업캐스팅은 명시적으로 선언하지 않아도 자동으로 처리됩니다.
부모 타입으로 참조하면 부모 클래스에서 정의된 멤버(필드, 메서드)만 접근 가능합니다.
(2) 코드 예제
4. 다운캐스팅 (Downcasting)
(1) 다운캐스팅이란?
정의: 부모 타입 변수를 자식 클래스 타입으로 변환하여, 자식 클래스의 멤버(필드, 메서드)에 접근할 수 있도록 하는 것.
특징:
다운캐스팅은 명시적으로 선언해야 합니다.
부모 타입이 실제로 참조하는 자식 객체만 다운캐스팅이 가능합니다.
부모 타입이 자식 객체를 참조하지 않는 경우 다운캐스팅은 런타임 오류를 발생시킵니다.
(2) 다운캐스팅 코드 예제
정상적인 다운캐스팅
잘못된 다운캐스팅 (런타임 오류)
왜 다운캐스팅은 명시적으로 선언해야 하는가?
부모 타입이 항상 자식 객체를 참조한다고 보장할 수 없기 때문입니다.
예를 들어, 아래와 같이 부모 객체를 생성하고 이를 자식 타입으로 변환하려 하면 런타임 오류가 발생합니다.
(3) 일시적인 다운캐스팅 예제
자식 클래스의 특정 메서드를 한 번 호출한 뒤 다시 부모 타입으로 유지합니다.
5. 다형성의 활용
다형성을 활용하면 동일한 부모 타입으로 다양한 자식 객체를 처리할 수 있습니다.
(1) 코드 예제
실행 결과
부모 클래스와 자식 클래스의 메모리 구조
자식 인스턴스를 생성하면 부모 클래스의 필드와 메서드가 메모리 상에 함께 생성됩니다.
부모 타입으로 참조하면 부모 클래스의 멤버만 접근 가능.
업캐스팅: Parent poly = new Child();
6. 정리
구분
설명
업캐스팅
자식 객체를 부모 타입 변수로 참조 (자동 변환 가능). 부모 멤버만 접근 가능.
다운캐스팅
부모 타입 변수를 자식 타입으로 변환. 자식 멤버에 접근 가능. 명시적으로 선언해야 하며, 타입 검사 필요.
오버라이딩
부모 타입으로 참조하더라도 오버라이딩된 메서드는 자식 클래스의 메서드가 호출됨.
다형성 활용
동일한 부모 타입으로 다양한 자식 객체를 처리 가능. 코드 확장성과 재사용성 증가.
Last updated