강의

멘토링

로드맵

Inflearn brand logo image

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

이용희님의 프로필 이미지
이용희

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

"생성자 호출순서"만 다뤄보자! (14개 코드예제) v3

26분 19초 질문있습니다

해결된 질문

작성

·

42

0

생성자 호출 순서 관련 질문입니다.

 

자식 기본 생성자 내부에 this("apple")이 있을 경우 super()전에 ChildY(String s)가 먼저 실행되고 ChildY(String s) 내부에서 암시적으로 super()을 호출 하는거 아닌가요?

 

gpt한테 물어봤는데 이게 맞다고 해서 헷갈리네요..

답변 2

1

주말코딩님의 프로필 이미지
주말코딩
지식공유자

질문자 분께서 생각하신 것이 맞습니다.

저는 빨리 풀려고 그렇게 쓴 것인데 영상에서 확실히 헷갈리게 되어있네요.

 

일단 우리가 영상에서 배웠듯이 대원칙에 있는 것과 같이

this()하고 super()하고 동시에 하나의 생성자에 있을 수 없습니다.

그래서 첫 생성자에서는 바로 super()-상위 클래스로 못 갑니다.

모든 this()를 통해 체이닝을 쭉쭉 따라가다가 더이상 this()가 없을 때 super()를 끼워넣습니다.

(this의 가장 끝 체인에 도달하면, 그 때 super로 가서 역으로 호출됩니다.)

 

그래서 정확한 해석 순서는 자식 안의 생성자를 다 갔다가,

그 다음에 부모의 기본 생성자 갔다가 파라미터 있는거 하나 호출하고 다시 돌아오는 것입니다.

 

제가 영상을 봐도 헷갈리게 되어있네요. 정석으로 다시 수정해야겠습니다.

체이닝은 질문 주신 방법이 맞습니다.

 

정확하게 다시 잡아드리자면

ChildY() -> ChildY(string) -> 암시적으로 super() 생김 -> ParentY() -> ParentY(int) ->

ParentY()로 복귀 -> 이후 역방향으로 쭉 복귀입니다.

 

이전에 비슷한 질문에 답변드린 것 공유드립니다.

https://inf.run/CUoL2

0

안녕하세요, 인프런 AI 인턴입니다. 이용희님.

자식 클래스의 생성자 호출 순서에 대한 질문을 주셨군요. 자바에서 생성자의 호출 순서는 중요한 개념입니다. 먼저 자식 생성자의 this()를 사용한 호출과 super() 호출의 순서를 짚어보겠습니다.

생성자 호출 순서

  1. 자식 클래스의 기본 생성자가 호출되면, 해당 생성자 내부에서 this("apple")와 같은 코드가 있으면, 자식 클래스의 다른 생성자 ChildY(String s)가 먼저 호출됩니다.
  2. ChildY(String s) 생성자가 호출되면, 이 생성자는 처음에 암시적으로 super()를 호출하여 부모 클래스의 생성자를 실행합니다.

즉, 자식 클래스의 생성자 호출 과정은 this()를 통해 다른 생성자로 진입된 후, 그 안에서 super()를 통해 부모 클래스의 생성자가 호출되는 구조입니다. 따라서 ChildY(String s) 내부에서 super()가 먼저 실행됩니다.

추가로 도움이 될 만한 유사한 질문에 대한 링크를 첨부합니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이용희님의 프로필 이미지
이용희

작성한 질문수

질문하기