인프런 커뮤니티 질문&답변
업캐스팅 문제 풀면 업캐스팅이 상속과 문제풀 때 어떻게 해석해야할지 모르겠습니다.
해결된 질문
작성
·
42
퀴즈
클래스는 무엇으로 가장 잘 설명될까요?
실행 가능한 코드의 묶음
데이터를 저장하는 공간
객체를 만들기 위한 설계도 또는 틀
프로그램의 시작점
답변 2
0
안녕하세요,
좋은 질문이십니다. 업캐스팅의 진짜 의미는 "참조 타입이 무엇인가"입니다.
아래와 같은 경우만 살피시면 됩니다. 생성자와는 무관하지만 메서드 상속에는 관련이 있습니다.
class Animal {
void sound() {
System.out.println("...");
}
}
class Dog extends Animal {
void sound() {
System.out.println("멍멍");
}
void fetch() { // Dog만 가진 메서드
System.out.println("공 가져옴");
}
}
public class Main {
public static void main(String[] args) {
// 일반 상속 사용
Dog dog = new Dog();
dog.sound(); // ✅ 멍멍
dog.fetch(); // ✅ 공 가져옴
// 업캐스팅
Animal animal = new Dog();
animal.sound(); // ✅ 멍멍 (오버라이딩 적용)
animal.fetch(); // ❌ 컴파일 에러! Animal에 fetch() 없음
}
}
업캐스팅은 제한을 거는 대신, 다양한 자식을 하나의 타입으로 다룰 수 있는 유연함을 얻는 것입니다.
그래서 생성자 자체는 상속과 거의 비슷하지만, 어떤 자식을 상속해서 갈아끼울 것인가를 선택할 수 있습니다.
class Cat extends Animal {
void sound() { System.out.println("야옹"); }
void purr() { System.out.println("그르릉"); }
}
public class Main {
public static void main(String[] args) {
// Animal 타입 배열 하나로 전부 관리
Animal[] animals = { new Dog(), new Cat(), new Dog() };
for (Animal a : animals) {
a.sound(); // 각자 오버라이딩된 메서드 실행
// a.fetch() 나 a.purr() 는 못 씀 → Animal만 보장되는 것만 호출
}
}
}
애초에 이런 개념인데 시험을 준비하려다보니 다양한 예시로 강의를 구성한 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다. Remi Yun님.
업캐스팅에 대해 궁금하신 점에 대한 답변을 드리겠습니다. 질문해주신 내용은 업캐스팅을 이해하는 데 있어 가장 중요한 부분인 ‘상속과의 차이점’에 대한 것입니다.
업캐스팅의 이해
업캐스팅의 기본 개념:
- 업캐스팅이란 자식 객체를 부모 클래스 타입의 참조 변수로 참조할 수 있게 하는 것입니다. 즉, 자식 객체지만 부모 클래스의 형태로 다룰 수 있게 되는 것입니다.
- 업캐스팅이란 자식 객체를 부모 클래스 타입의 참조 변수로 참조할 수 있게 하는 것입니다. 즉, 자식 객체지만 부모 클래스의 형태로 다룰 수 있게 되는 것입니다.
상속과의 차이점:
- 상속은 자식 클래스가 부모 클래스의 속성과 메서드를 그대로 사용할 수 있게 해 줍니다.
- 반면, 업캐스팅을 하면 부모 클래스의 참조를 사용하기 때문에 부모 클래스에 존재하는 메서드 및 속성만 직접적으로 사용할 수 있습니다. 자식 클래스에서 새로 정의한 메서드는 접근할 수 없지만, 자식 클래스에서 오버라이딩한 메서드는 호출됐을 때 자식 클래스의 메서드가 동작합니다. 이것이 다형성의 핵심이며, 다양한 객체를 동일한 방식으로 처리할 수 있게 해주는 장점이 있습니다.
- 상속은 자식 클래스가 부모 클래스의 속성과 메서드를 그대로 사용할 수 있게 해 줍니다.
신경 써야 할 사항
생성자의 호출 순서: 자식 클래스의 생성자를 호출할 때, 항상 부모 클래스의 생성자가 먼저 호출됩니다. 이는 객체 생성 시 상속 계층에 있는 모든 부모 클래스의 초기화가 완료되어야 하기 때문입니다.
오버라이딩된 메서드 호출: 업캐스팅을 통해 참조된 객체에서 메서드를 호출할 때, 자식 클래스에서 오버라이딩된 메서드가 우선적으로 호출됩니다. 이는 자바의 다형성 구현 방식이며, 객체의 실제 타입에 따라 수행 동작이 달라질 수 있음을 의미합니다.
관련 추가 설명 및 예시
업캐스팅과 다형성을 사용하면, 코드가 보다 유연하고 확장 가능하게 설계됩니다. 예를 들어, 다양한 유사 종류의 객체를 동일한 부모 타입의 인터페이스로 처리할 수 있다는 점이 큰 장점입니다.
관련 질문 및 답변
추가적으로 아래의 게시물도 참고하시면 업캐스팅에 대한 이해를 넓히는 데 도움이 될 것입니다:
Remi Yun님의 질문에 대한 설명이 충분히 되었기를 바랍니다. 😊
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




