인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

윤서연님의 프로필 이미지
윤서연

작성한 질문수

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

Java언어 기출문제의 변형

자식이 태어나면 부모를 호출한다??

해결된 질문

작성

·

101

·

수정됨

0

5분에 나오는 문제에서 main 함수의 2번째 라인을 실행할 때,

B의 생성자가 호출되면 A의 생성자도 자동으로 호출되어서 출력값이 XAABY가 되는 줄 알았는데 아니네요...

자식이 태어날 때 부모가 태어나는 경우에 해당이 안 되는 건가요?

 

22분에 나오는 문제에서는 자식 클래스 기본 생성자 맨 윗줄에 this(20)을 명시적으로 호출했는데도 부모 기본 생성자를 먼저 호출하네요

 

무슨 차이인가요?

답변 2

0

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

  1. 부모의 어떤 생성자가 호출될지는 자식의 생성자를 한 번 쫙 살펴보셔야 합니다. 그 과정에서 명시적으로 부르는 게 없으면 기본 생성자를 호출합니다. 명시적으로 super(x, x, ...)로 부르면 그것에 해당하는 것을 부르는 것이고요. 지금은 자식이 태어나는 과정에서 어쨌든 super()로 기본 생성자를 불렀습니다. 그러면 그 때 부모 초기화하고 다시 돌아와서 나머지 실행하면 됩니다.

  2. 여기서 this(20)은 부모가 아니라 자기 것입니다. this는 나고 부모는 super입니다. 자식의 다른 생성자까지 불렀는데 그 과정에서 부모 생성자를 명시적으로 부른 게 아예 없습니다. 그래서 기본 생성자를 부릅니다.

0

안녕하세요, 인프런 AI 인턴입니다. 윤서연님.

질문하신 내용은 자바의 생성자 호출 순서와 관련되어 있습니다. 이는 많은 프로그래머들이 처음 접할 때 혼동할 수 있는 부분입니다. 관련된 여러 게시물에서 논의된 내용을 요약하여 설명드리겠습니다.


생성자 호출 순서 설명

자바에서 객체를 생성할 때, 부모 클래스의 생성자가 먼저 호출된 다음 자식 클래스의 생성자가 호출됩니다. 하지만 자식 클래스의 생성자 코드에 명시적으로 다른 생성자를 호출하는 this()가 있을 경우, 우선적으로 해당 생성자가 호출됩니다.

  • A s1 = new A('X');

    • A(char x) 생성자가 호출되어 ‘X’를 출력합니다.
  • A s2 = new B('Y');

    • 기본적으로 B(char x) 생성자가 호출될 것 같지만, 첫 줄에 this();가 있으면 B의 기본 생성자가 먼저 호출됩니다.
    • B의 기본 생성자가 실행되기 전에 A의 기본 생성자가 자동으로 호출됩니다(명시적인 super() 호출이 없어도 기본 생성자는 항상 호출됨).
    • 그리고 나서 B의 기본 생성자가 끝나고 돌아와 나머지 코드(B(char x) 생성자의 남은 코드)를 실행하여 ‘Y’를 출력하게 됩니다.

결론적으로, 출력은 “XABY”가 됩니다. 이는 자식의 생성자에서 부모의 기본 생성자를 호출하고 난 후에 자신의 로직을 수행하기 때문입니다.

관련된 질문과 답변 링크

  1. 생성자 문제 질문 this() 질문

    • 이 게시물에서는 this()super()의 호출 순서와 작동 방식에 대한 추가 설명이 포함되어 있습니다.
  2. this 와 super 질문드립니다.

    • 생성자 호출 시 부모 생성자가 얼마나 호출되는지에 대한 오해를 풀 수 있는 답변이 있습니다.
  3. 자바 기출변형 문제질문

    • 생성자 호출 순서의 또 다른 예시로 이해를 도울 수 있습니다.

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

윤서연님의 프로필 이미지
윤서연

작성한 질문수

질문하기