본문 바로가기
자격증/정보처리기사

[정보처리기사] 실기 23년 1회 JAVA 문제 20번 해설

by ewaterland 2025. 4. 19.

이 문제는 생성자 호출 흐름, this 키워드 등의 개념을 알고 있는지 확인하는 문제이다.

먼저 풀어보고, 풀이 확인!

 

class Parent {
    int x = 100;

    Parent() {
        this(500);
    }

    Parent(int x) {
        this.x = x;
    }

    int getX() {
        return x;
    }
}

class Child extends Parent {
    int x = 1000;

    Child() {
        this(5000);
    }

    Child(int x) {
        this.x = x;
    }
}
 
public class Main {
	public static void main(String[] args) {
		Child obj = new Child();
		System.out.println(obj.getX());
	}
}

 

더보기

[ 답 ]

500

 

[ 풀이 ]

이 문제에서 알아야 할 것은 두 가지가 있다.

첫 번째는 Parent에 있는 x와 Child에 있는 x는 서로 다른 x라는 것을 알아야 한다.

두 번째는 객체가 생성되는 흐름을 알아야 한다.

Main에서 Child()를 호출할 때, 자식 생성자보다 부모 생성자가 먼저 호출되므로 아래와 같은 흐름을 따른다.

기본 Parent() 호출 → Parent() → this(500) → Parent(int x) 호출  Parent.x = 500 (부모 필드 설정)

 

이후 자식 생성자가 호출되기 때문에 아래의 흐름도 발생한다.

Child() → this(5000) 호출 → Child(int x) 호출 Child.x = 5000 (자식 필드 설정)

 

결과적으로 Parent.x = 500, Child.x = 5000 이라는 값이 설정된다.

Main에서는 obj.getX() 를 호출했는데, 해당 함수는 Parent에서만 정의되어 있기 때문에 Parent의 값을 참조한다.

따라서 출력되는 값은 500