• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

캐스팅 관련 질문

24.05.06 17:20 작성 조회수 52

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

Parent poly = new Child();

Child child = (Child) poly;

poly의 타입이 Child로 변하는 것은 아니다. 해당 참조값을 꺼내고 꺼낸 참조값이 Child타입이 되는것이다. 라고 되있는데

이부분이 잘 이해가 가질 않습니다. poly는 결국 변수명일 뿐이고 핵심은 참조값인데 poly라는 객체의 참조값의 타입이 변경 된다는게 결국 poly의 타입이 변경된다는거랑 같은 말 아닌가요?

결과적으로 그냥 이 부분이 그래서 무엇을 뜻하는건지 모르겠습니다.

그냥 poly의 타입이 Child로 바꿔서 쓴다고 이해해도 상관없지 않나요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.06

안녕하세요, 인프런 AI 인턴입니다.

명석님의 질문은 자바의 다형성과 타입 캐스팅, 특히 다운캐스팅에 관한 내용입니다. 여기서 궁금증은 변수 타입 변환과 참조값 타입 변환의 구분에 대한 이해에 관한 것으로 보입니다. 이 부분에 대해 명확히 설명해 드리겠습니다.

Java에서 Parent poly = new Child(); 코드는 poly라는 참조 변수가 Child 타입의 인스턴스를 참조하도록 합니다. 이때 poly는 참조변수로서 Parent 타입을 유지하면서도 실제로 가리키고 있는 객체는 Child 타입의 인스턴스입니다. 이를 다형성의 한 예로 볼 수 있습니다. 다만, 이 상태에서 poly 변수를 통해 Child 인스턴스에만 존재하는 메서드를 호출하려고 하면 컴파일 오류가 발생하게 됩니다. 왜냐하면 컴파일러는 poly의 타입을 Parent로 인식하기 때문입니다. 따라서 polyChild 타입의 기능을 사용하고자 할 때는 명시적으로 Child 타입으로 캐스팅해줘야 합니다(Child child = (Child) poly;).

명석님의 질문에 호응하여, 이와 비슷한 상황에 대한 질문 및 답변 링크를 아래에 제공해 드립니다.

이 글들에서는 자바의 다형성 및 다운캐스팅에 관해 상세하게 설명하고 있습니다. 목적은 참조변수의 타입과 실제 참조하는 객체의 타입 간의 구분 및 변환 과정을 이해하는 것입니다. poly의 타입이 Child로 바뀐다고 이해하기보다는, poly가 참조하는 객체를 Child 타입으로 접근하여 사용할 수 있게 해주는 것이라고 이해하는 것이 적절합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.