인프런 커뮤니티 질문&답변

devocean님의 프로필 이미지
devocean

작성한 질문수

김영한의 실전 자바 - 기본편

상속과 메서드 오버라이딩

상속시 메모리 구조와 @Overriding 어노테이션 관련 질문 드립니다.

작성

·

179

·

수정됨

0

안녕하세요.

좋은 강의 정말 재미있게 잘 수강하고 있습니다.

 

 

'상속과 메서드 오버라이딩' 강의 내용 관련하여 궁금한 점이 생겨 질문 드립니다.

 

 

A와 B는 강의에서 설명해주신 내용입니다.

 

[A.상속시 메모리 구조]

상속한 클래스의 메서드를 호출하는 경우에

1)본인 타입에서 해당 메서드를 먼저 찾고

2-1) 없으면 부모 타입에서 찾는다

2-2) 있으면 종료

 

[B. @Overriding]

자식 클래스의 메서드에 @Overriding 애노테이션을 붙여 오버라이딩 수행 시, 부모 클래스에 해당 메서드가 존재하지 않으면 컴파일 오류가 발생

 

그런데 여기에서 B 처럼 동작하려면 A의 2-2 경우에 자식 타입만 조사하고 종료하는 것이 아니라, 컴파일 타임에 부모 클래스의 메서드도 조사해야하지 않나요?

@Overriding 애노테이션을 사용했을 때 실제로 어떤식으로 동작하는지 궁금합니다.

 

감사합니다.

답변 1

1

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

devocean 님의 ‘상속시 메모리 구조와 @Overriding 어노테이션 관련 질문’에 대해 관련 내용이 담긴 정보를 찾았습니다. 답변은 질문자님의 상황과 직접적인 관련이 있는 경우에만 제공됩니다. 다행히, 귀하의 질문에 대한 답변이 포함되어 있어, 유익한 정보를 제공드릴 수 있게 되었습니다.

궁금하신 내용에 대한 답변

  1. 상속 관계에서의 메서드 호출 메커니즘: 상속 관계에서 자식 클래스의 인스턴스가 생성되고, 메서드 호출이 이루어질 때의 동작은 귀하가 설명한 A의 절차를 따릅니다. 자식 타입에서 해당 메서드를 먼저 찾고, 없으면 부모 타입에서 찾아서 실행합니다. 이 과정은 런타임에 이루어지며, 자바의 동적 바인딩 특성 덕분에 가능합니다.

  2. @Override 어노테이션의 동작 원리: @Override 어노테이션은 컴파일 타임에 체크됩니다. 실제로 자식 클래스에서 부모 클래스의 메서드를 오버라이드 할 때 @Override를 사용하면, 컴파일러가 자식 클래스의 해당 메서드와 정확하게 일치하는 시그니처를 가진 메서드가 부모 클래스에 존재하는지 검사합니다. 만약 일치하는 메서드가 없으면 컴파일 오류를 발생시킵니다. 이는 개발자가 의도치 않은 메서드 이름의 오류나 매개변수의 불일치를 사전에 발견할 수 있게 도와줍니다.

이러한 내용은 “다형성1 과목 개념정리 질문입니다“에서 참고할 수 있으멀로 해당 내용을 검토하시어, 더 깊은 이해를 얻으시길 바랍니다. 이 링크에서는 다형성과 메서드 오버라이딩에 대한 구체적인 설명이 이루어지고 있으며, @Override 어노테이션의 역할과 상속 구조에서의 동작 원리에 대해 좀 더 심층적으로 다루고 있습니다.

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

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

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

devocean님의 프로필 이미지
devocean
질문자

오... A는 런타임 B는 컴파일타임에 동작하는 거군요. A도 컴파일 타임에 이루어져 접근할 주소를 미리 찾아 저장해두고, 런타임에는 저장해둔 주소에 접근만하는 방식으로 동작할 거라고 예상했는데 아닌가보네요.

devocean님의 프로필 이미지
devocean

작성한 질문수

질문하기