책 내용 질문하기
기출문제집 14P 20번 문제
도서
2024 시나공 퀵이지 정보처리기사 실기 단기완성
페이지
14
조회수
190
작성일
2024-07-27
작성자
정*혁
첨부파일

[2023년 4월 시행 문제 20번]


class Child extends Parent {


int x = 4000;

Child() {

this.x = x;

}

}

'

.

.

.

.

Child c = new Child();



Child()의 시작점에서 super() 생성자가 묵시적으로 포함되어 있다는데 어떨 때 묵시적으로 포함돼 있는지 궁금합니다.


답변
2024-07-27 20:41:37

안녕하세요 길벗수험서 운영팀입니다.

상속관계에서 생성자를 호출하는 순서를 알아야 풀수 있는 문제입니다.


생성자(Constructor) 라는것은 객체 생성시 초기화 작업을 위한 일종의 함수로

객체게 처음 생성될때 반드시 호출이 되고, 제일 먼저 실행이 되고,

반드시 클래스명과 동일하게 정의를 해야하며 반환값이 없다 라는 특징을 가지고 있습니다.


문제를 보면 Parent 클래스가 있고 Child 클래스가 있는데 상속관계 입니다.

이때 상속 관계에서 자식 객체를 생성하면 생성자의 호출 순서가 조금 다릅니다


Child c = new Child();

이코드의 경우 Child클래스의 객체변수 c를 생성을 하는데

이렇게 객체를 생성하면 가장 먼저 생성자가 실행이 됩니다.


생성자의 특징이 반환값이 없고 클래스명이 생성자명과 동일해야 하는데

Child 클래스에 보면 Child(), Child(int x) 이렇게 두개가 있습니다

Child() 는 매개변수가 없고, Child(int x) 는 매개변수가 1개가 있습니다

Child(), Child(int x) 이렇게 두개는 이름은 동일한데 매개변수를 다르게 해서

다양한 호출에 응답을 할수 있게 만들어 놓은것을 "오버로딩"이라고 합니다.


Child c = new Child();

이코드에서 new Child()에서 매개변수가 없는 Child() 를 호출합니다.


상속 관계에서 자식 클래스의 객체를 생성하면

상속 관계에 있는 부모 클래스 객체도 반드시 생성이 됩니다.


그리고 생성자가 실행하는 문장 중에 다른 생성자를 호출하는 코드가 우선순위를 먼저 갖습니다.

하지만 문제를 봤을때 다른 생성자(부모 생성자)를 호출하는 코드가 없습니다.


왜냐하면 JAVA 언어에서는 암묵적인 약속으로 자식 클래스의 객체를 생성하면

부모 클래스의 객체를 생성해야 하기 때문에

자식 클래스의 생성자를 실행하면

부모 클래스의 생성자를 호출하는 가장 기본적인 ‘super( );'를 실행하기로 암묵적으로 약속이 되어있습니다


따라서 이 문제 코드에서는 ‘super( ); 부모 클래스의 생성자를 호출하는 코드가 생략이 되어있지만

암묵적인 약속으로 인해 항상 실행이 되어야 합니다.

행복한 하루되세요 :)

  • 관리자
    2024-07-27 20:41:37

    안녕하세요 길벗수험서 운영팀입니다.

    상속관계에서 생성자를 호출하는 순서를 알아야 풀수 있는 문제입니다.


    생성자(Constructor) 라는것은 객체 생성시 초기화 작업을 위한 일종의 함수로

    객체게 처음 생성될때 반드시 호출이 되고, 제일 먼저 실행이 되고,

    반드시 클래스명과 동일하게 정의를 해야하며 반환값이 없다 라는 특징을 가지고 있습니다.


    문제를 보면 Parent 클래스가 있고 Child 클래스가 있는데 상속관계 입니다.

    이때 상속 관계에서 자식 객체를 생성하면 생성자의 호출 순서가 조금 다릅니다


    Child c = new Child();

    이코드의 경우 Child클래스의 객체변수 c를 생성을 하는데

    이렇게 객체를 생성하면 가장 먼저 생성자가 실행이 됩니다.


    생성자의 특징이 반환값이 없고 클래스명이 생성자명과 동일해야 하는데

    Child 클래스에 보면 Child(), Child(int x) 이렇게 두개가 있습니다

    Child() 는 매개변수가 없고, Child(int x) 는 매개변수가 1개가 있습니다

    Child(), Child(int x) 이렇게 두개는 이름은 동일한데 매개변수를 다르게 해서

    다양한 호출에 응답을 할수 있게 만들어 놓은것을 "오버로딩"이라고 합니다.


    Child c = new Child();

    이코드에서 new Child()에서 매개변수가 없는 Child() 를 호출합니다.


    상속 관계에서 자식 클래스의 객체를 생성하면

    상속 관계에 있는 부모 클래스 객체도 반드시 생성이 됩니다.


    그리고 생성자가 실행하는 문장 중에 다른 생성자를 호출하는 코드가 우선순위를 먼저 갖습니다.

    하지만 문제를 봤을때 다른 생성자(부모 생성자)를 호출하는 코드가 없습니다.


    왜냐하면 JAVA 언어에서는 암묵적인 약속으로 자식 클래스의 객체를 생성하면

    부모 클래스의 객체를 생성해야 하기 때문에

    자식 클래스의 생성자를 실행하면

    부모 클래스의 생성자를 호출하는 가장 기본적인 ‘super( );'를 실행하기로 암묵적으로 약속이 되어있습니다


    따라서 이 문제 코드에서는 ‘super( ); 부모 클래스의 생성자를 호출하는 코드가 생략이 되어있지만

    암묵적인 약속으로 인해 항상 실행이 되어야 합니다.

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.