인프런 커뮤니티 질문&답변
생성자 호출순서 강의 10번 문제 30분대 질문입니다
해결된 질문
작성
·
32
답변 2
0
부모 생성자는 그 어떤 경우에도 체이닝 끝에서 super로 가게 됩니다.
저 경우도 결국 가장 마지막에 super("banana")로 간 것이죠.
우리가 "부모가 먼저 실행된다"를 착각하면 안되는 것이,
일단 전체 호출 순서는 자식의 생성자 체인이 쭉~ 순서대로 돌다가,
실행은 역순으로 되기 때문에 부모가 먼저 실행되는 겁니다.
만약에 자식 생성자에서 this -> this -> .... -> super가 된다면
결국 부모 생성자 먼저 실행되겠죠? 호출의 역순이 실행이니까요.
그렇기 때문에 부모 생성자로 먼저 간 것으로 보시는 것이 맞습니다.
부모 생성자가 먼저 실행되는 것은 맞으니까요.
0
안녕하세요, 인프런 AI 인턴입니다. elly_sally님.
자바에서의 생성자 호출 순서는 중요한 개념이며, 질문 주신 내용은 그에 대한 이해도를 높이기 위한 좋은 기회입니다. 일반적으로 자바에서 객체를 생성할 때, 자식 클래스의 생성자에서 super()를 통해 부모 클래스의 생성자를 명시적으로 호출하지 않으면, 자바는 자동으로 부모 클래스의 기본 생성자를 호출합니다. 이는 객체 생성 과정에서 부모 클래스의 초기화를 보장하기 위함입니다.
생성자 호출 순서 설명
자식 생성자에서 부모 생성자로의 자동 호출:
- 자식 클래스의 생성자가 호출될 때, 자바는 기본적으로 부모 클래스의 생성자를 우선 호출하여 부모 클래스의 필드와 메서드를 초기화합니다.
- 자식 생성자 내부에
super()가 명시적으로 호출되지 않으면, 자동으로 부모의 기본 생성자가 호출됩니다.
- 자식 클래스의 생성자가 호출될 때, 자바는 기본적으로 부모 클래스의 생성자를 우선 호출하여 부모 클래스의 필드와 메서드를 초기화합니다.
파라미터 있는 생성자:
- 만약 자식 클래스에서 파라미터가 있는 생성자를 정의하고, 이 안에서 부모 클래스의 특정 생성자를 호출하려면
super(파라미터)를 사용하여 명시적으로 해당 생성자를 호출해야 합니다.
- 자식 생성자에 직접적으로
super()를 호출하지 않고 파라미터가 있는 다른 생성자를 호출하더라도 최종적으로는super()가 포함된 생성자가 호출됩니다.
- 만약 자식 클래스에서 파라미터가 있는 생성자를 정의하고, 이 안에서 부모 클래스의 특정 생성자를 호출하려면
업캐스팅(Upcasting) 여부와는 기본적으로 무관하지만, 업캐스팅을 사용하는 경우에도 위의 생성자 호출 규칙은 여전히 적용됩니다. 즉, 자식 객체가 생성되더라도 부모 객체가 먼저 초기화된 후에자식 객체가 초기화됩니다.
이에 관한 참고 링크를 추가로 제공드립니다. 더 깊이 이해하시고자 하는 경우 이들을 참고하시기 바랍니다:
1. 자바 상속과 생성자 호출 순서 이해하기
2. this와 super 키워드의 사용 예제
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




